V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
CaptainD
V2EX  ›  问与答

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

  •  
  •   CaptainD · 2022-06-23 11:16:59 +08:00 · 794 次点击
    这是一个创建于 895 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    • 现在的问题,love you 也被分词了,love 和 you 两个词影响了结果
    1. hello world 和 you ,hello world 和 love 都被高亮出来
    2. 结果应该包含 hello world 和 love you ,但是现在结果包含 hello world 和 love ,包含 hello world 和 you 的结果也被检索出来了
    • es 的检索式如下
    {
      "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
      }
    }
    1 条回复    2022-06-23 11:58:36 +08:00
    Morriaty
        1
    Morriaty  
       2022-06-23 11:58:36 +08:00   ❤️ 1
    1. 涉及到词间距的查询,你应该去研究下 `span_query`
    2. 希望结果包含所有的搜索词,去调 `minmum_should_match`
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6030 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:09 · PVG 10:09 · LAX 18:09 · JFK 21:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.