Jav*_*ict 5 search term elasticsearch
我对Elasticsearch中的查询一词有疑问。我发送以下查询:
{
"query": {
"term": {
"title":"Test1"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个空结果:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我发送以下内容:
{
"query": {
"term": {
"root":true
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有:
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 0.2876821,
"hits": [
{
"_index": "content_2018-05-30-092148",
"_type": "topic",
"_id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbeb1",
"_score": 0.2876821,
"_source": {
"_meta": {
"model": "Secafi\\Content\\Topic"
},
"id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbeb1",
"title": "Test2",
"root": true
}
},
{
"_index": "content_2018-05-30-092148",
"_type": "topic",
"_id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbeb2",
"_score": 0.2876821,
"_source": {
"_meta": {
"model": "Secafi\\Content\\Topic"
},
"id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbeb2",
"title": "Test3",
"root": true
}
},
{
"_index": "content_2018-05-30-092148",
"_type": "topic",
"_id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbebc",
"_score": 0.2876821,
"_source": {
"_meta": {
"model": "Secafi\\Content\\Topic"
},
"id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbebc",
"title": "Test1",
"root": true
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
如果在标题字段上进行匹配查询,我将得到相同的结果,它将永远不会返回任何文档。
怎么了。为什么第一个查询不返回文档Test1?
字词查询查找确切的字词。您可能正在使用带有小写过滤器的标准分析仪。因此,当索引中的内容为“ term1”时,您正在精确地搜索“ Term1”。
对于完全匹配的数字或ID(例如9844-9332-22333)之类的术语,该术语非常有用。对于帖子标题之类的字段而言,情况就不那么如此了。
要确认这一点,您可以执行以下操作:
{
"query": {
"term": {
"title.keyword":"Test1"
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的记录以“ Test1”的确切标题建立索引,则该方法应该起作用。这将使用关键字分析器而不是标准分析器(请注意标题后的“ .keyword”)。在最新版本的elasticsearch中,默认情况下会添加关键字分析器,除非您覆盖此行为。关键字是完全匹配的“ noop”分析器,它将整个字符串作为单个令牌返回以进行匹配。
对于标题,您可能想要的是:
{
"query": {
"match": {
"title":"Test1"
}
}
}
Run Code Online (Sandbox Code Playgroud)
匹配查询通过默认用于对文档建立索引(小写等)的标准分析器运行您的输入字符串,因此elasticsearch可以将您的查询文本匹配到elasticsearch索引中的内容。
请查看文档,以获取有关匹配与字词的更多详细信息。 https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/query-dsl-match-query.html https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/query -dsl-term-query.html
| 归档时间: |
|
| 查看次数: |
4365 次 |
| 最近记录: |