elasticsearch elasticsearch查询字符串在使用短语时未按预期执行模糊查询
在查询字符串中使用短语进行elasticsearch时,我没有得到预期的结果 比如说我有一个头衔,“约翰·韦恩去曼哈顿”。我已经用“标准”分析器为标题字段编制了索引,下面是我的查询。不管有没有模糊指示器(~),除非我把“约翰·韦恩”拼写正确,否则它都找不到任何东西。“john wane”或类似的测试没有结果
elasticsearch elasticsearch查询字符串在使用短语时未按预期执行模糊查询,
elasticsearch,nest,
elasticsearch,Nest,在查询字符串中使用短语进行elasticsearch时,我没有得到预期的结果 比如说我有一个头衔,“约翰·韦恩去曼哈顿”。我已经用“标准”分析器为标题字段编制了索引,下面是我的查询。不管有没有模糊指示器(~),除非我把“约翰·韦恩”拼写正确,否则它都找不到任何东西。“john wane”或类似的测试没有结果 "query": { "query_string": { "fields": ["title^2"], "query": "\"john wayne\"~1",
"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文档至少缺乏上下文。上面更新了完整的示例。非常感谢您提供完整的示例!你提到他们没有被分析。。。那么,如果您要使用分析仪,您会建议使用什么?