如何使用elasticsearch实现与algolia相同的效果

l2osamch  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(589)

我花了大约一个星期的时间修补elasticsearch。我正在尝试创建一个搜索查询,它将在文档的所有字段上启用子字符串搜索('kua lum'=>'kuala lumpur')和模糊搜索('koala lumpur'=>'kuala lumpur')。到目前为止,我已经了解到使用multi_match进行多字段模糊搜索,使用通配符进行子字符串搜索(不能使用ngram,因为它会破坏模糊搜索),但实际上没有关于如何组合它们的信息。
昨天我试了一下algolia,它完全满足了我的需要。不幸的是,我正在处理敏感数据,所以我不允许在本地基础设施之外托管它,即使algolia提供了内部部署,我担心这对我的香蕉共和国来说太贵了。
所以我想我被elasticsearch困住了。有没有可能让它做我想做的事?我也可以尝试其他搜索引擎。
upd:试用了meilisearch,开箱即用

qmb5sa22

qmb5sa221#

elastic提供了极其灵活的全文搜索功能。
实现这一目标可能有多种方法。如果你事先知道你的搜索库,你可以用同义词过滤器。
否则,您可以始终将两个查询合并为一个“should”布尔查询。
或者像这样的查询也会返回'吉隆坡'当你搜索'吉隆坡',虽然分数会少得多

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

现在,您可以使用模糊因子来满足您的需要(尝试将其设置为2,以获得您想要的内容),它发挥了神奇的作用,但请注意该因子,因为它可能会影响您的搜索性能。
您应该避免使用通配符,因为它们占用大量资源。
另一种方法是将每个单词作为一个单独的搜索词,并将它们传递给多个“应该”查询。

相关问题