elasticsearch - 为 Elasticsearch 查询添加模糊性

标签 elasticsearch elasticsearch-5

我有一个自动完成/建议索引的查询,如下所示:

{
    "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/

相关文章:

search - Elasticsearch:在列表中搜索字段 null OR

elasticsearch - “aggs”查询的输出结果不正确

elasticsearch - 搜索Elasticsearch时自定义分析器不起作用

elasticsearch - 我如何在Elasticsearch NEST函数中应用过滤器

elasticsearch - Elasticsearch-用于非日志数据可视化的Kibana

elasticsearch - Elasticsearch :对同一数据运行多个分析器

elasticsearch - 如何设置elasticsearch集群

elasticsearch - 提取管道中我的文档字段的类型是什么?

elasticsearch - 如何删除elasticsearch跨集群搜索种子5.5.1-1

django - 如何实现干草堆搜索获取自动完成功能