在elasticsearch的query_string中使用一个短语时,我没有得到预期的结果。
假设我有个头衔,“约翰·韦恩去曼哈顿”。我已经用“标准”分析器索引了标题字段,下面是我的查询。不管有没有模糊指示符(~),除非我把“约翰·韦恩”拼写正确,否则它什么也找不到。对于“约翰·瓦恩”或类似的,没有结果。
"query": {
"query_string": {
"fields": ["title^2"],
"query": "\"john wayne\"~1",
"default_operator": "AND",
"phrase_slop": 0,
"minimum_should_match": "100%"
}
}我试着在倾斜后改变数字以增加毛茸茸,但还是没有匹配。
有什么想法吗?
发布于 2014-06-21 04:57:08
对一个短语进行模糊搜索实际上是一种“接近”搜索。而不是测量字母之间的levenshtein距离,而是查询中术语之间的邻近性。
如果查询的结果是:
"query" : "john wane~1" 有关差异的更多信息,请参见此处: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
}
}
}'https://stackoverflow.com/questions/24334188
复制相似问题