给出以下查询:
match: {"title": "proportions"}
对于使用词干分析器标题字段分析的文档:
Doc 1 title: proportion
Doc 2 title: proportions
将返回两份文件。
在内部执行查询,如下所示:
"bool":{
"should": [{"term" : {"title" : "proportions}}]
}
如果是,那么匹配根词"比例"发生?我试图了解管道中根词的匹配位置。
答案 0 :(得分:1)
实际上,这不是内部执行查询的方式。 onCreate
和if (number % 2 == 0) {
System.out.println("Even");
} else {
System.out.println("Odd");
}
查询在某些方面有所不同,但最重要的一点是,Term查询会在反向索引中搜索确切的指定查询文本,而Match查询则使用查询分析查询文本字段使用的分析器,然后使用这些值来搜索反向索引。
让我们看看一个例子,使用英语词干分析器。
我制作了一个名为my_analyzer(like in the docs)的英语词干分析器:
Term
接下来,我为我的词干分析器定义一个映射,只需要一个名为Match
的简单字段:
PUT
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"type":"custom",
"tokenizer": "whitespace",
"filter": [
"my_stemmer"
]
}
},
"filter": {
"my_stemmer": {
"type": "stemmer",
"name": "english"
}
}
}
}
}
现在,让我们索引两个文档,
value
当我们执行以下查询时,您认为会发生什么?仅供参考,您可以更改"比例"这里是"比例"为了相同的结果。
PUT _mapping/test
{
"properties": {
"value": {
"type": "string",
"analyzer": "my_analyzer"
}
}
}
没有结果。这很重要,因为我们直接在倒排索引中搜索"比例",然后变空。这实际上是因为单词"比例"或"比例"不在我们的倒排索引中。那里有什么?让我们看看:
PUT{"value":"proportion"}
PUT{"value":"proportions"}
索引中只有单词"query": {
"bool": {
"should": [{
"term": {"value": {"value": "proportion"}}
}]
}
}
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
。如果您修改上面的bool查询以使用文本"tokens": [
{
"token": "proport",
"start_offset": 0,
"end_offset": 11,
"type": "word",
"position": 1
}
]
,那么您将获得两个文档。当您使用匹配查询时,如下所示:
proport
你实际上跑了#34;比例"通过词干分析器,匹配查询在你的倒排索引中搜索"比例",得到这些结果:
proport
TLDR:术语查询完全反映您在倒排索引中给出的内容,匹配查询在倒排索引中查找分析的输出