首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >词干搜索中的匹配查询内部-弹性

词干搜索中的匹配查询内部-弹性
EN

Stack Overflow用户
提问于 2015-08-19 19:18:17
回答 1查看 561关注 0票数 0

给定以下查询:

代码语言:javascript
复制
 match: {"title": "proportions"}

对于使用词干分析器分析标题字段的文档:

代码语言:javascript
复制
Doc 1 title: proportion

Doc 2 title: proportions

会送回两份文件。

在内部执行查询的方式如下:

代码语言:javascript
复制
"bool":{
      "should": [{"term" : {"title" : "proportions}}]

 }

如果是的话,“比例”这个词根的匹配是在哪里进行的?我在努力弄清楚在管道中的词根匹配在哪里。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-19 20:36:21

实际上,查询不是这样在内部执行的。TermMatch查询有几个不同之处,但最重要的一点是,术语查询搜索倒排索引,准确地查找指定的查询文本,而Match查询使用所使用的任何分析器分析查询文本,然后使用这些值搜索倒排索引。

让我们来看看一个例子,使用英语词干器。

我制作了一个名为my_analyzer (就像在医生里)的英语词干过滤器:

代码语言:javascript
复制
PUT
{
   "settings": {
      "analysis": {
         "analyzer": {
            "my_analyzer": {
                "type":"custom",
               "tokenizer": "whitespace",
               "filter": [
                  "my_stemmer"
               ]
            }
         },
         "filter": {
            "my_stemmer": {
               "type": "stemmer",
               "name": "english"
            }
         }
      }
   }
}

接下来,我为我的词干分析器定义了一个映射,只需一个名为value的简单字段就可以了:

代码语言:javascript
复制
PUT _mapping/test
{
     "properties": {
        "value": {
           "type": "string",
           "analyzer": "my_analyzer"
        }
     }
}

现在,让我们索引两个文档,

代码语言:javascript
复制
PUT{"value":"proportion"}
PUT{"value":"proportions"}

当我们执行以下查询时,您认为会发生什么?FYI,您可以在这里将“比例”更改为“比例”,以获得相同的结果。

代码语言:javascript
复制
"query": {
      "bool": {
         "should": [{
               "term": {"value": {"value": "proportion"}}
            }]
      }
   }

"hits": {
  "total": 0,
  "max_score": null,
  "hits": []
}

无结果.这一点很重要,因为我们直接在倒排索引中搜索“比例”,结果是空的。这实际上是因为“比例”或“比例”这两个词不在我们的倒排索引中。里面有什么?让我们找出:

代码语言:javascript
复制
"tokens": [
  {
     "token": "proport",
     "start_offset": 0,
     "end_offset": 11,
     "type": "word",
     "position": 1
  }
]

索引中只有单词proport。如果您修改上面的bool查询以使用文本proport,那么您将得到两个文档。当您像这样使用匹配查询时:

代码语言:javascript
复制
"query": {
    "match": {
       "value": "proportions"
    }
}

实际上,通过词干分析器运行“比例”,匹配查询在倒排索引中搜索"proport",得到以下结果:

代码语言:javascript
复制
  "hits": [
     {
        "_index": "test",
        "_type": "test",
        "_id": "1",
        "_score": 0.30685282,
        "_source": {
           "value": "proportion"
        }
     },
     {
        "_index": "test",
        "_type": "test",
        "_id": "2",
        "_score": 0.30685282,
        "_source": {
           "value": "proportion"
        }
     }
  ]

TLDR:术语查询准确地查找倒排索引中给它的内容,匹配查询在倒排索引中查找分析的输出。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32103886

复制
相关文章

相似问题

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