elasticsearch elasticsearch查询字符串在使用短语时未按预期执行模糊查询,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch elasticsearch查询字符串在使用短语时未按预期执行模糊查询,elasticsearch,nest,elasticsearch,Nest" />

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

elasticsearch elasticsearch查询字符串在使用短语时未按预期执行模糊查询,elasticsearch,nest,elasticsearch,Nest,在查询字符串中使用短语进行elasticsearch时,我没有得到预期的结果 比如说我有一个头衔,“约翰·韦恩去曼哈顿”。我已经用“标准”分析器为标题字段编制了索引,下面是我的查询。不管有没有模糊指示器(~),除非我把“约翰·韦恩”拼写正确,否则它都找不到任何东西。“john wane”或类似的测试没有结果 "query": { "query_string": { "fields": ["title^2"], "query": "\"john wayne\"~1",

在查询字符串中使用短语进行elasticsearch时,我没有得到预期的结果

比如说我有一个头衔,“约翰·韦恩去曼哈顿”。我已经用“标准”分析器为标题字段编制了索引,下面是我的查询。不管有没有模糊指示器(~),除非我把“约翰·韦恩”拼写正确,否则它都找不到任何东西。“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" 
有关差异的更多信息,请参见此处:

编辑:

下面是一个具体的例子:

创建一些文档

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
        }
    }
}'

对短语进行模糊搜索实际上是“接近”搜索。与其测量字母之间的levenshtein距离,不如测量查询中术语之间的接近度

您的查询应返回以下结果:

"query" : "john wane~1" 
有关差异的更多信息,请参见此处:

编辑:

下面是一个具体的例子:

创建一些文档

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
        }
    }
}'

在这种情况下,这难道不只是使“衰退”变得模糊吗?你必须做“john~1 wane~1”,但是你也会得到“john”的变体,这可能是可取的,也可能是不可取的。我想要的是整个短语“john wayne”是模糊的,但它也是一个短语,在一个文档中找不到“john”,在另一个文档中找不到“wayne”。是的,找到了。我只是想展示一个示例查询,它可以对特定的术语进行模糊搜索。如果你想让整个短语在每个术语的基础上变得模糊,事情就会变得更复杂。如果将字段视为单个标记,则可以对其执行模糊查询,但它将在整个字段级别上执行。我想你最好的选择是:我不确定这个查询是做什么的。文件有限,imho。它似乎只是说我可以把比赛包装在span_multi。。。好吧,但它有什么作用?是的,我理解你的困惑。elasticsearch文档至少缺乏上下文。上面更新了完整的示例。非常感谢您提供完整的示例!你提到他们没有被分析。。。那么,如果你要使用一个分析仪,你会建议它使用什么呢?在这种情况下,这难道不只是使“减弱”变得模糊吗?你必须做“john~1 wane~1”,但是你也会得到“john”的变体,这可能是可取的,也可能是不可取的。我想要的是整个短语“john wayne”是模糊的,但它也是一个短语,在一个文档中找不到“john”,在另一个文档中找不到“wayne”。是的,找到了。我只是想展示一个示例查询,它可以对特定的术语进行模糊搜索。如果你想让整个短语在每个术语的基础上变得模糊,事情就会变得更复杂。如果将字段视为单个标记,则可以对其执行模糊查询,但它将在整个字段级别上执行。我想你最好的选择是:我不确定这个查询是做什么的。文件有限,imho。它似乎只是说我可以把比赛包装在span_multi。。。好吧,但它有什么作用?是的,我理解你的困惑。elasticsearch文档至少缺乏上下文。上面更新了完整的示例。非常感谢您提供完整的示例!你提到他们没有被分析。。。那么,如果您要使用分析仪,您会建议使用什么?