首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >elasticsearch查询字符串在使用短语时不按预期执行模糊查询

elasticsearch查询字符串在使用短语时不按预期执行模糊查询
EN

Stack Overflow用户
提问于 2014-06-20 19:15:11
回答 1查看 3.7K关注 0票数 1

在elasticsearch的query_string中使用一个短语时,我没有得到预期的结果。

假设我有个头衔,“约翰·韦恩去曼哈顿”。我已经用“标准”分析器索引了标题字段,下面是我的查询。不管有没有模糊指示符(~),除非我把“约翰·韦恩”拼写正确,否则它什么也找不到。对于“约翰·瓦恩”或类似的,没有结果。

代码语言:javascript
复制
"query": {

  "query_string": {
    "fields": ["title^2"],
    "query": "\"john wayne\"~1",
    "default_operator": "AND", 
    "phrase_slop": 0, 
    "minimum_should_match": "100%"
  }
}

我试着在倾斜后改变数字以增加毛茸茸,但还是没有匹配。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-21 04:57:08

对一个短语进行模糊搜索实际上是一种“接近”搜索。而不是测量字母之间的levenshtein距离,而是查询中术语之间的邻近性。

如果查询的结果是:

代码语言:javascript
复制
"query" : "john wane~1" 

有关差异的更多信息,请参见此处:fuzziness

编辑:

以下是一个具体的娱乐例子:

创建一些文档

代码语言:javascript
复制
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?"
}'

示例朴素查询,非短语:

代码语言:javascript
复制
curl -XGET "http://localhost:9200/_search" -d'
{
    "query" : {
        "query_string": {
           "query": "john AND wane~1"
        }
    }
}'

如何使用span进行短语查询。注意,这些术语都是小写的,因为术语查询没有被分析。此外,您可以调整跨度斜率,以控制彼此之间的距离,每个术语应该是。

代码语言:javascript
复制
curl -XGET "http://localhost:9200/_search" -d'
{
    "query" : {
        "span_near" : {
        "clauses" : [
            { "span_term" : { "message" : "john" } },
            { "span_term" : { "message" : "wayne" } }
        ],
        "slop" : 0,
        "in_order" : true
        }
    }
}'

而现在,这是真正的交易,你到底在寻找什么。

代码语言:javascript
复制
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
        }
    }
}'
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24334188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档