ElasticSearch部分短语匹配

3 full-text-search elasticsearch

我是一个ElasticNoob,但我一直在玩一些简单的短语匹配,如下所示:

query: {
  match_phrase: {
    my_field: {
      query: "silly dogs playing about",
      slop:  100
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但这仅匹配具有所有 4个术语的条目(愚蠢,狗,玩,约).理想情况下它仍然匹配像"正在玩的傻狗"之类的东西,它没有"约"关键字(因此会得到较低的分数).

这似乎是文本搜索引擎的一个非常常见的用例,所以我认为我的Google-fu必须是弱的,因为我在弹性搜索中找不到关于部分短语匹配的任何内容.

有人能指出我在正确的方向吗?只是要清楚:

  • 关键字的顺序很重要(match_phraseslop允许我们这样做)
  • 数字的关键字匹配的问题(match_phrase简单排除如果项目的任何关键字丢失-这是不理想的我的情况)

谢谢!

Ada*_*ski 8

推荐的解决方案是:

我们不是将邻近匹配作为绝对要求,而是将其用作信号 - 作为潜在的许多查询之一,每个查询都有助于每个文档的总体得分(请参阅大多数字段).

在这里您有描述它的文章:https://www.elastic.co/guide/en/elasticsearch/guide/current/proximity-relevance.html

所以你的查询看起来像:

  query: {
    bool: {
      must: {
        match: {
          my_field: {
            query: "silly dogs playing about",
            minimum_should_match: "30%"
          }
        }
      },
      should: {
        match_phrase: {
          my_field: {
            query: "silly dogs playing about",
            slop:  50
          }
        }
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)