【发布时间】:2019-07-06 13:00:26
【问题描述】:
假设我有 3 个文档,每个文档只包含一个字段(但假设还有更多,我们需要搜索所有字段)。
- 字段值为“第一秒”
- 字段值为“第二优先”
- 字段值为“first second third”
这是一个可用于创建这 3 个文档的脚本:
# drop the index completely, use with care!
curl -iX DELETE 'http://localhost:9200/test'
curl -H 'content-type: application/json' -iX PUT 'http://localhost:9200/test/_doc/one' -d '{"name":"first second"}'
curl -H 'content-type: application/json' -iX PUT 'http://localhost:9200/test/_doc/two' -d '{"name":"second first"}'
curl -H 'content-type: application/json' -iX PUT 'http://localhost:9200/test/_doc/three' -d '{"name":"first second third"}'
我需要找到唯一一个在其中一个字段中恰好包含“第一秒”文本的文档(文档 1)。
这是我尝试过的。
A.普通搜索:
curl -H 'Content-Type: application/json' -iX POST 'http://localhost:9200/test/_search' -d '{
"query": {
"query_string": {
"query": "first second"
}
}
}'
返回所有 3 个文档
B.引用
curl -H 'Content-Type: application/json' -iX POST 'http://localhost:9200/test/_search' -d '{
"query": {
"query_string": {
"query": "\"first second\""
}
}
}'
给出 2 个文档:1 和 3,因为两者都包含“第一秒”。
这里https://stackoverflow.com/a/28024714/7637120 他们建议在索引时使用“关键字”分析器来分析字段,但我想避免对映射进行任何自定义。
是否有可能避免它们并且仍然只找到文档 1?
【问题讨论】: