在query_string中使用elasticsearch时,我没有得到预期的结果.
让我说我有一个头衔,'约翰韦恩去曼哈顿'.我用'标准'分析器索引标题字段,以下是我的查询.有或没有模糊指示符(〜)它将找不到任何东西,除非我有'john wayne'拼写正确.没有'john wane'或类似的结果.
"query": { "query_string": { "fields": ["title^2"], "query": "\"john wayne\"~1", "default_operator": "AND", "phrase_slop": 0, "minimum_should_match": "100%" } }
我试图在波浪之后改变数字以增加虚弱,但仍然没有匹配.
有任何想法吗?
对短语进行模糊搜索实际上是"邻近"搜索.而不是测量字母之间的levenshtein距离,而是查询中的术语之间的接近度.
如果是,您的查询应返回结果:
"query" : "john wane~1"
有关差异的更多信息,请参见此处:http: //www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_fuzziness
编辑:
这是一个具体的娱乐示例:
创建一些文档
curl -XPUT "http://localhost:9200/test/test/1" -d' { "message" : "My best friend is John Wayne, who is yours?" }' curl -XPUT "http://localhost:9200/test/test/2" -d' { "message" : "My best friend is John Marion Wayne, who is yours?" }' curl -XPUT "http://localhost:9200/test/test/3" -d' { "message" : "My best friend is John Marion Mitchell Wayne, who is yours?" }'
示例天真查询,非短语:
curl -XGET "http://localhost:9200/_search" -d' { "query" : { "query_string": { "query": "john AND wane~1" } } }'
如何使用span执行短语查询.请注意,术语是较低的,因为术语查询未被分析.此外,您可以调整跨度斜率以控制每个术语应该彼此接近的程度.
curl -XGET "http://localhost:9200/_search" -d' { "query" : { "span_near" : { "clauses" : [ { "span_term" : { "message" : "john" } }, { "span_term" : { "message" : "wayne" } } ], "slop" : 0, "in_order" : true } } }'
现在,这是您正在寻找的真正的交易.
curl -XGET "http://localhost:9200/_search" -d' { "query" : { "span_near" : { "clauses" : [ { "span_multi" : { "match" : { "fuzzy" : { "message" : { "value" : "john", "fuzziness" : "1" } } } } }, { "span_multi" : { "match" : { "fuzzy" : { "message" : { "value" : "wane", "fuzziness" : "1" } } } } } ], "slop" : 0, "in_order" : true } } }'