【发布时间】:2019-09-09 06:15:44
【问题描述】:
我正在使用 ElasticSearch 7.3。我正在使用“通用”搜索框对多个字段进行查询。例如。我希望用户只需输入搜索查询,而不是尝试填写特定字段的特定搜索框。
就我而言,为了降低复杂性,我只为这个用例搜索了几个选定的字段。比如说姓名、地址。
// Target of copy_to of multiple fields
address:
type: text
// Target of copy_to of multiple fields
name:
type: text
我正在使用以下查询,
"query": {
"bool": {
"should": [{
"multi_match": {
"query": "chantz auburn",
"fields": ["address", "name"],
"type": "best_fields",
"operator": "or"
}
}, {
"multi_match": {
"query": "chantz auburn",
"fields": ["address", "name"],
"type": "phrase_prefix",
"operator": "or"
}
}],
"minimum_should_match": "1"
}
}
有了这个,我希望得到第一个点击是一个文档,
name: chantz lasts
address 9090 auburn drive KY
但我看到的却是,
name: chantz hasts
address 1122 castllight drive KY
name: chantz blasts
address 5656 suma pl CA
至少在前 10 个匹配项中基本上没有结果应该与两个字段中存在的术语匹配。即
name: chantz lasts
address 9090 auburn drive KY
如果我将查询的顺序从chantz auburn 切换到auburn chantz,那么我会得到类似的结果,但这次地址中包含auburn,但名称中没有chantz。
我也试过cross_fields。不确定我在这里缺少什么?
【问题讨论】:
-
您还可以包含来自搜索端点的explain 信息,这应该会让这里更加清楚。
标签: elasticsearch