2016-06-09 131 views
0

我是ElasticNoob,但我一直在用一些简单的短语匹配玩弄如下:ElasticSearch部分短语匹配

query: { 
    match_phrase: { 
    my_field: { 
     query: "silly dogs playing about", 
     slop: 100 
    } 
    } 
} 

但这一点也不逊色于有所有 4项(傻项,狗,玩,约)。理想情况下,还是会匹配像它没有“左右”的关键字(因为这一点会得到较低的分数)“被打傻狗”。

这似乎是一个非常常见的用于文本搜索引擎的用例,所以我想我的Google-fu一定很弱,因为在弹性搜索中找不到任何关于部分词组匹配的内容。

有人可以在这里指出我正确的方向吗?只是要清楚:

  • 秩序的关键字事项match_phraseslop使我们能够做到这一点)
  • 一些关键字匹配问题(match_phrase根本不包括的项目如果任何关键字失踪 - 这是不理想的我的情况)

谢谢!

回答

3

Recomended解决方法是:

代替使用接近匹配作为绝对要求的,我们可以 使用它作为一个信号作为潜在的许多查询中的一个,其中每个 有助于整体的成绩。每个文档(请参阅大多数字段)。

在这里你的文章描述它: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 
      } 
     } 
     } 
    } 
    } 
+0

啊,正是我要找的 - 谢谢!发挥魅力。 – JoeRocc

0

可以使用可变调用minimum_should_match要么指定的,需要的话百分比匹配或指定多少话应该匹配。

query: { 
    match_phrase: { 
    my_field: { 
     query: "silly dogs playing about", 
     slop: 100, 
     minimum_should_match: "75%" 
    } 
    } 
} 

这意味着4个单词中至少有3个需要匹配才能成功。

+0

这将无法正常工作。 'match_phrase'不支持'minimum_should_match'参数。 –