我已经为Elasticsearch索引配置了两个字段:“Name”和“Type”。 当我执行下面的查询时,我没有得到任何结果,因为“actor”在“类型”字段中。
{
"query": {
"multi_match": {
"query": "johnny depp actor",
"operator": "AND",
"fields": [
"name",
"type"
],
"tieBreaker": 0.7
}
}
}
是否可以使用多个单词执行查询,并且即使某些单词位于“名称”字段中而其他单词位于“类型”字段中,也可以获得结果。
谢谢你的帮助!
答案 0 :(得分:0)
您可以尝试:
{
"query": {
"bool":{
"should":[
{"match_phrase":{"name":"johnny depp actor"}},
{"match_phrase":{"type":"johnny depp actor"}},
{"match_phrase":{"name":"johnny"}},
{"match_phrase":{"name":"depp"}},
{"match_phrase":{"name":"actor"}},
{"match_phrase":{"type":"johnny depp actor"}},
{"match_phrase":{"type":"johnny"}},
{"match_phrase":{"type":"depp"}},
{"match_phrase":{"type":"actor"}},
]
}
}
}
答案 1 :(得分:0)
我终于找到了解决方案。 对于那些可能需要它的人,解决方案是使用cross-field,以便所有术语必须出现在至少一个字段中才能匹配文档。
{
"query": {
"multi_match": {
"query": "johnny depp actor",
"type": "cross_fields",
"operator": "AND",
"fields": [
"name",
"type"
],
"tieBreaker": 0.7
}
}
}