如何使用Elasticsearch与Algolia一样

问题描述

我花了大约一周的时间来修补Elasticsearch。我正在尝试创建一个搜索查询,该查询将对文档的所有字段启用子字符串搜索('kua lum'=>'kuala lumpur')和模糊搜索('koala lumpur'=>'kuala lumpur')。到目前为止,我了解到您使用 multi_match 进行多字段模糊搜索,并且使用通配符进行子字符串搜索(不能使用nGram,因为它会破坏模糊搜索),但实际上没有有关如何组合它们的信息。

昨天,我尝试了Algolia,它立即完成了我需要的所有操作。不幸的是,我正在使用敏感数据,因此不允许将其托管在本地基础结构之外,即使Algolia确实提供了本地服务,我担心对于我的香蕉共和国来说,它也太昂贵了。

所以我想我坚持使用Elasticsearch。是否可以使它做我想做的事? 我也可以自由尝试其他搜索引擎。

upd:尝试过MeiliSearch,可以直接使用

解决方法

Elastic提供了非常灵活的全文本搜索功能。

可能有多种方法可以实现它。如果您事先知道搜索基础,则可以使用synonyms filter

否则,您始终可以将两个查询合并为一个“应该”布尔查询。

或者这样的查询也会在您搜索“ kual lump”时返回“吉隆坡”,尽管得分会少得多

    {
      "query": {
          "multi_match": {
            "fields": [
              "city"
            ],"query": "kual lum","type": "best_fields","operator": "or","fuzziness": "AUTO"
          }
        }
    }

现在,您可以根据需要使用模糊性因子(尝试将其设为2,以获得所需的内容),它具有魔力,但请记住该因子,因为它可能会影响搜索性能。

您应该避免使用通配符,因为通配符会占用大量资源。

另一种方法是将每个单词视为一个单独的搜索词,并将其传递给多个“应”查询。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...