我有一个自动完成/建议索引的查询,如下所示:
{
"size": 10,
"query": {
"multi_match": {
"query": "'"+search_text+"'",
"type": "bool_prefix",
"fields": [
"company_name",
"company_name._2gram",
"company_name._3gram"
]
}
}
}
这个查询完全按照我想要的方式工作。但是我想添加模糊性:“AUTO”到这个查询。我阅读了文档并尝试像这样添加它:
{
"size": 10,
"query": {
"multi_match": {
"query": {
"fuzzy": {
"value": "'"+search_text+"'",
"fuzziness": "AUTO"
}
},
"type": "bool_prefix",
"fields": [
"company_name",
"company_name._2gram",
"company_name._3gram"
]
}
}
}
但是我收到了这个错误
```
"type": "parsing_exception",
"reason": "[multi_match] unknown token [START_OBJECT] after [query]",```
这导致我的查询无法工作。
最佳答案
无需添加 fuzzy query 。要将模糊性添加到 multi-match query,您需要添加模糊性属性,如下所述:
由于您使用 bool_prefix 作为多重匹配查询的类型,因此它会在每个字段上创建一个 match_bool_prefix 来分析其输入并根据术语构造 bool 查询。除最后一个术语外的每个术语都用于术语查询中。最后一项用于前缀查询。
添加包含索引数据、映射、搜索查询和搜索结果的工作示例
索引映射:
{
"mappings": {
"properties": {
"company_name": {
"type": "search_as_you_type",
"max_shingle_size": 3
},
"serviceTitle": {
"type": "search_as_you_type",
"max_shingle_size": 3
},
"services": {
"type": "search_as_you_type",
"max_shingle_size": 3
}
}
}
}
指数数据:
{
"company_name":"sequencing how shingles are actually used"
}
搜索查询:
{
"size": 10,
"query": {
"multi_match": {
"query": "sequensing how shingles",
"type": "bool_prefix",
"fields": [
"company_name",
"company_name._2gram",
"company_name._3gram"
],
"fuzziness":"auto"
}
}
}
搜索结果:
"hits": [
{
"_index": "65153201",
"_type": "_doc",
"_id": "1",
"_score": 1.5465959,
"_source": {
"company_name": "sequencing how shingles are actually used"
}
}
]
如果你想查询sequensing
,并得到上面的文档,那么你需要将多重匹配的类型从bool_prefix
更改为另一个type,根据根据您的用例。
关于elasticsearch - 为 Elasticsearch 查询添加模糊性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65153068/