首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ElasticSearch: shingles -匹配短语,如果字段包含确切的标记

ElasticSearch: shingles -匹配短语,如果字段包含确切的标记
EN

Stack Overflow用户
提问于 2016-10-20 04:49:16
回答 1查看 1.4K关注 0票数 3

我是有弹性搜索的新手,在下列情况下有困难:

  1. 让我们考虑一下,我有两个文档,其中只包含一个字段"text“
    1. “文本”:"token1 token4“
    2. “文本”:"token2 token3“
    3. “文本”:"token4 token5“

  1. 通过下面的查询文本"token1 token2 token3 token4 token5“,我只想找到文档2和3。

我需要类似于shingles过滤器的东西,它将从查询中创建以下标记:

"token1 token2“、"token2 token3”、"token3 token4“、"token4 token5”

并通过这些标记进行精确匹配,因此令牌"token2 token3“和"token4 token5”将匹配文档。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-10-20 20:28:54

这可以通过使用板条滤器并使output_unigrams false(它将防止单个令牌的生成)来实现。创建这样的索引

代码语言:javascript
复制
PUT shingle_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "shingle_analyzer": {
          "tokenizer": "standard",
          "filter": [
            "shingle_filter",
            "lowercase"
          ]
        }
      },
      "filter": {
        "shingle_filter":{
          "type" : "shingle",
          "max_shingle_size" : 2,
          "min_shingle_size" : 2,
          "output_unigrams" : false,
          "output_unigrams_if_no_shingles" : true
        }
      }
    }
  },
  "mappings": {
    "mytype":{
      "properties": {
        "text" : {
          "type": "string",
          "analyzer": "shingle_analyzer"
        }
      }
    }
  }
}

索引一些样本文档。

代码语言:javascript
复制
POST /shingle_index/mytype/_bulk
{"index":{"_id":5}}
{"text":"token1 token4"}
{"index":{"_id":3}}
{"text":"token2 token3"}
{"index":{"_id":2}}
{"text":"token4 token5"}

然后,简单的匹配查询将给出所需的结果。

代码语言:javascript
复制
GET shingle_index/_search
{
  "query": {
    "match": {
      "text": "token1 token2 token3 token4"
    }
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40145690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档