我不知道为什么,使用URI Search方式搜索文档会返回正确的文档,但如果我使用API DSL则找不到文档。
要重现此问题:
如果没有创建任何索引,我会插入此文档:
curl http://localhost:9299/integrationtest-index/searchable/ID_XXXX2 -d '{ "ref" : "XXXX2", "field1" : "value1" }'
因此,索引是使用默认映射(类型可搜索)自动创建的:
curl http://localhost:9299/integrationtest-index?pretty
{
"integrationtest-index" : {
"aliases" : { },
"mappings" : {
"searchable" : {
"properties" : {
"field1" : {
"type" : "string"
},
"ref" : {
"type" : "string"
}
}
}
},
"settings" : {
"index" : {
"field1" : "value1",
"ref" : "XXXX2",
"number_of_shards" : "5",
"creation_date" : "1466780216631",
"number_of_replicas" : "1",
"uuid" : "GBj2VF-wQy6JP74AqoIn5g",
"version" : {
"created" : "2020099"
}
}
},
"warmers" : { }
}
}
此查询返回一个文档:
curl http://localhost:9299/integrationtest-index/searchable/_search?q=ref:XXXX2
但是这个不存在的其他查询响应:
curl -XPOST http://localhost:9299/integrationtest-index/searchable/_search/exists -d '
{
"query": {
"term" : {
"ref" : "XXXX2"
}
}
}'
为什么最后一个查询说文档不存在?
环境:
答案 0 :(得分:0)
我每隔几个月就会遇到同样的问题,所以我决定自己回答并分享我的愚蠢错误。 默认情况下,elasticsearch使用索引:已分析,因此带有术语的查询未找到任何文档。 如果您使用URI Search way,则弹性搜索正在执行query_string而不是术语查询。
此查询有效:
curl -XPOST http://localhost:9299/integrationtest-index/searchable/_search/exists -d '
{
"query": {
"match" : {
"ref" : "XXXX2"
}
}
}'
文档中的更多信息,请参阅Why doesn’t the term query match my document?
部分