elasticsearch 如何实现短语之间的距离搜索

2022-06-23 11:16:59 +08:00
 CaptainD

要求:短语之间的词距搜索,并将搜索结果高亮显示

现在的问题是:如果涉及多个短语,那么第二个短语开始就会收到分词影响

例子:"hello world" #N100 "love you",这个查询会转变为下面的 ES 查询语句

  1. hello world 和 you ,hello world 和 love 都被高亮出来
  2. 结果应该包含 hello world 和 love you ,但是现在结果包含 hello world 和 love ,包含 hello world 和 you 的结果也被检索出来了
{
  "bool" : {
    "must" : [
      {
        "bool" : {
          "must" : [
            {
              "bool" : {
                "should" : [
                  {
                    "match_phrase" : {
                      "fileContent" : {
                        "query" : "\"hello world\" \"love you\"",
                        "slop" : 100,
                        "zero_terms_query" : "NONE",
                        "boost" : 2.0
                      }
                    }
                  },
                  {
                    "match_phrase" : {
                      "fileContent" : {
                        "query" : "\"love you\" \"hello world\"",
                        "slop" : 100,
                        "zero_terms_query" : "NONE",
                        "boost" : 2.0
                      }
                    }
                  }
                ],
                "adjust_pure_negative" : true,
                "boost" : 1.0
              }
            }
          ],
          "adjust_pure_negative" : true,
          "boost" : 1.0
        }
      }
    ],
    "adjust_pure_negative" : true,
    "boost" : 1.0
  }
}
802 次点击
所在节点    问与答
1 条回复
Morriaty
2022-06-23 11:58:36 +08:00
1. 涉及到词间距的查询,你应该去研究下 `span_query`
2. 希望结果包含所有的搜索词,去调 `minmum_should_match`

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/861585

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX