我正在试图弄清楚如何在Elasticsearch中实现以下内容,并感觉好像我之前已经阅读过如何操作文档但却无法再找到它。
我将搜索3个字段; profileIds,title和description。
对于个人资料ID我只是在搜索一个完全匹配的术语,这很简单。
我将会有一个与标题和描述相匹配的短语列表,但我只想匹配,如果总共有3个或更多匹配任何关键字的标题或描述(它不一定是相同字段上的相同关键字。)
我知道我应该有这样的嵌套或查询设置:(匹配个人资料ID,(标题上有3个匹配或任何关键字的描述))但我正在努力的部分是说“3个匹配”
这在Elasticsearch中是否可行?
答案 0 :(得分: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
查询将匹配,如果所有字词都匹配。