2014-02-12 95 views
1

我想弄清楚如何在Elasticsearch中实现以下内容,并感觉好像我之前已经阅读过有关如何去做但不能再找到它的文档。是否可以确保在Elasticsearch中进行搜索的n匹配?

我有3个字段,我将搜索; profileIds,标题和说明。

对于个人资料ID我只是寻找一个确切的词匹配,这是足够小的。

我将有一个短语列表来匹配标题和描述,但我只想匹配,如果总共有3个或更多与任何关键字匹配的标题或描述(它不一定是相同字段中的相同关键字)。 (匹配配置文件ID,(有3个匹配任何关键字的标题或描述))但我挣扎的部分是说“3匹配”。

这可能在Elasticsearch?

回答

0

您可以使用bool query连同terms query并使用minimum_should_match来尝试。

例子:

{ 
    "query": { 
    "bool": { 
     "must": [ 
      { 
       "term": { 
       "profile_ids": { 
        "value": "42" 
       } 
       } 
      } 
     ], 
     "should": [ 
      { 
       "terms": { 
       "title": ["foo", "bar", "baz"], 
       "minimum_should_match": 3 
       } 
      }, 
      { 
       "terms": { 
       "description": ["a", "b", "c", "d"], 
       "minimum_should_match": 3 
       } 
      } 
     ], 
     "minimum_should_match": 1 
    } 
    } 
} 

所以terms查询都必须在至少3个关键字匹配。然后其中一个应该匹配,而profile_ids必须始终匹配。

请注意,如果您的关键字少于3个,则terms查询将匹配所有条款匹配。

+0

重读这个问题后,我发现这不完全正确。要求是在两个字段中共有3个匹配,而不是两个字段之一的3个匹配。我现在就离开它,它可能仍然有帮助。 – dnll

相关问题