我正在使用弹性搜索来查找城市中的人。因此,我具有属性firstname
,lastname
和city
。
[一个可能的搜索词是例如“ Charlotte Renee Tucker”,它应返回以下人员:{firstname: "Charlotte Renee", lastname: "Tucker", city: "New York"}
或{firstname: "Renee", lastname: "Tucker", city: "Charlotte"}
,但不返回{firstname: "Charlotte", lastname: "Tucker", city: "New Orleans"}
。
因此,所有术语都必须出现在某个字段中。在最后一个示例中,单词“ Renee”不是结果的一部分,因此不应返回。如果仅在一个属性中找到所有单词,例如您的名字是“ Charlotte Renee Tucker”,那是一个有效的搜索结果。我的查询当前看起来像这样:
{
"bool": {
"should": [
{
"match": {
"lastname": {
"query": "Charlotte Renee Tucker",
"operator": "OR"
}
}
},
{
"match": {
"firstname": {
"query": "Charlotte Renee Tucker",
"operator": "OR"
}
}
},
{
"match": {
"city": {
"query": "Charlotte Renee Tucker",
"operator": "OR"
}
}
}
]
}
}
但是这也会返回一个单词与某些属性匹配的人。我已经玩过minimum_should_match
参数,但是如果仅在一个属性中找到所有单词,则此功能将无效。有人可以帮忙吗?
我认为您要搜索的是一个copy_to参数,通过该参数,您可以将所有3个搜索字段组合在一起,然后使用AND而不是OR(例如此处的示例:https://www.elastic.co/guide/en/elasticsearch/reference/current/copy-to.html)