我正在努力将'term'与多个字段(或_all字段)匹配 我想在cross_fields上进行模糊匹配,但不支持。 任何想法如何做或任何其他方式做到这一点?
query: {
multi_match: {
query: term,
type: "cross_fields",
fields: ['_all']
}
}
在这里尝试解决方案时
ElasticSearch multi_match query over multiple fields with Fuzziness
我收到此错误
[parsing_exception]类型[cross_fields]不允许使用Fuziness {line = 1& col = 128}
elasticsearch版本5.0
编辑: 这是我正在构建的查询
bool: {
must: [
{
fuzzy: {
_all: term
}
},
{
fuzzy: {
"location.country": country
}
},
{
fuzzy: {
"location.city": city
}
}
]
}
答案 0 :(得分:1)
cross_fields
通过在多个字段中搜索字词来工作。由于cross_fields不支持模糊性,因此您必须以不同的方式编写查询。
一种可能是:用should实现你自己的“cross_fields”并在那里添加模糊性。
假设您的术语是:“term1 term2”,您可以按字边界(正则表达式\b
)进行拆分,然后以这种形式进行划分:
{
{
"query": {
"bool": {
"should": [{
"match": {
"field1": "term",
"fuzziness": 1
}
},{
"match": {
"field1": "term",
"fuzziness": 1
}
},{
"match": {
"field2": "term1",
"fuzziness": 1
}
},{
"match": {
"field2": "term12",
"fuzziness": 1
}
}
]
}
}
}
}
如果您有许多字段,这可能不是最佳选择,查询将成为术语和字段的笛卡尔积。
重要提示您正在使用_all字段,这是一个字段。所有其他字段都被编入索引。也许你甚至不需要跨域?