如何找到与不同查询中的所有单词匹配的文档?
How can I find documents which match all words in differents queries?
例如使用此映射:
PUT /unit-test
{
"mappings": {
"properties": {
"name": { "type": "text" },
"landlords": {
"type": "nested",
"properties": {
"name": { "type": "text" }
}
}
}
}
}
如果我有这个文件:
{
"name": "T2 - Boulevard Haussmann - P429",
"landlords": [
{ "name": "John Doe" }
]
}
我希望“boulevard hausmann”和“boulevard haussman doe”匹配,但不匹配“rue haussman”或“haussman jeanne”。
我不能将 multi_match
与 "operator": "and"
一起使用,因为 landlords
是嵌套的。
一个想法是将 copy_to 映射参数设置为 name
和 landlords.name
字段,以便将两个字段的值复制到另一个字段(例如,names
),您将用于搜索。
因此您的映射可能如下所示:
{
"mappings": {
"properties": {
"name": {
"type": "text",
"copy_to": "names"
},
"landlords": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"copy_to": "names"
}
}
},
"names": {
"type": "text"
}
}
}
}
和您的搜索
{
"query": {
"match": {
"names": {
"query": "boulevard haussman doe",
"operator": "AND"
}
}
}
}
例如使用此映射:
PUT /unit-test
{
"mappings": {
"properties": {
"name": { "type": "text" },
"landlords": {
"type": "nested",
"properties": {
"name": { "type": "text" }
}
}
}
}
}
如果我有这个文件:
{
"name": "T2 - Boulevard Haussmann - P429",
"landlords": [
{ "name": "John Doe" }
]
}
我希望“boulevard hausmann”和“boulevard haussman doe”匹配,但不匹配“rue haussman”或“haussman jeanne”。
我不能将 multi_match
与 "operator": "and"
一起使用,因为 landlords
是嵌套的。
一个想法是将 copy_to 映射参数设置为 name
和 landlords.name
字段,以便将两个字段的值复制到另一个字段(例如,names
),您将用于搜索。
因此您的映射可能如下所示:
{
"mappings": {
"properties": {
"name": {
"type": "text",
"copy_to": "names"
},
"landlords": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"copy_to": "names"
}
}
},
"names": {
"type": "text"
}
}
}
}
和您的搜索
{
"query": {
"match": {
"names": {
"query": "boulevard haussman doe",
"operator": "AND"
}
}
}
}