Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 如何使用Elasticsearch实现与Algolia相同的功能_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Search_Algolia_Fuzzy - Fatal编程技术网 elasticsearch 如何使用Elasticsearch实现与Algolia相同的功能,elasticsearch,search,algolia,fuzzy,elasticsearch,Search,Algolia,Fuzzy" /> elasticsearch 如何使用Elasticsearch实现与Algolia相同的功能,elasticsearch,search,algolia,fuzzy,elasticsearch,Search,Algolia,Fuzzy" />

elasticsearch 如何使用Elasticsearch实现与Algolia相同的功能

elasticsearch 如何使用Elasticsearch实现与Algolia相同的功能,elasticsearch,search,algolia,fuzzy,elasticsearch,Search,Algolia,Fuzzy,我花了大约一个星期的时间修补Elasticsearch。我正在尝试创建一个搜索查询,该查询将在文档的所有字段上启用子字符串搜索“kua lum”=>“kuala lumpur”和模糊搜索“koala lumpur”=>“kuala lumpur”。到目前为止,我已经了解到,在多字段模糊搜索中使用multi_match,在子字符串搜索中使用通配符不能使用nGram,因为它会破坏模糊搜索,但实际上没有关于如何组合它们的信息 昨天我尝试了一下Algolia,它做了我需要的一切。不幸的是,我使用的是敏感

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

昨天我尝试了一下Algolia,它做了我需要的一切。不幸的是,我使用的是敏感数据,因此我不允许在本地基础设施之外托管这些数据,即使Algolia提供了内部部署,我担心这对我的香蕉共和国来说太贵了

所以我想我被Elasticsearch困住了。有可能让它做我想让它做的吗? 我也可以尝试其他搜索引擎


upd:试用了MeiliSearch,开箱即用

Elastic提供了极其灵活的全文搜索功能

实现这一目标可能有多种方式。如果你事先知道你的搜索库,你可以用它

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

或者,当你搜索“吉隆坡”时,这样的查询也会返回“吉隆坡”,尽管分数会少得多

    {
      "query": {
          "multi_match": {
            "fields": [
              "city"
            ],
            "query": "kual lum",
            "type": "best_fields",
            "operator": "or",
            "fuzziness": "AUTO"
          }
        }
    }
现在,您可以使用模糊因子来满足您的需要尝试将其设置为2,以获得您想要的,它会发挥神奇的作用,但请注意该因子,因为它可能会影响您的搜索性能

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


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

Elastic提供了极其灵活的全文搜索功能

实现这一目标可能有多种方式。如果你事先知道你的搜索库,你可以用它

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

或者,当你搜索“吉隆坡”时,这样的查询也会返回“吉隆坡”,尽管分数会少得多

    {
      "query": {
          "multi_match": {
            "fields": [
              "city"
            ],
            "query": "kual lum",
            "type": "best_fields",
            "operator": "or",
            "fuzziness": "AUTO"
          }
        }
    }
现在,您可以使用模糊因子来满足您的需要尝试将其设置为2,以获得您想要的,它会发挥神奇的作用,但请注意该因子,因为它可能会影响您的搜索性能

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


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

尝试将其设置为4或5-ES支持0,1,2的模糊性。谢谢@SahilGupta指出,我使用了一个相当旧的版本。谢谢你的回答。这是我尝试的第一件事,但决不是真正的前缀匹配。它使用默认的模糊性规则,因此只有在已经拼写了len-2字符时才开始工作。想象一下,如果这座城市被称为“吉隆坡”。我希望仍然可以使用“kua-lum”查询找到它。我需要前缀匹配或模糊搜索,前缀不能拼写错误。你能举一个“应该”查询的例子吗?我自己尝试过,但没有让它与“multi_match”和“wildcard”一起工作。因此,ES中的任何文本字段都会在存储到反向索引之前进行分析和标记。当您在索引中存储吉隆坡时,它会标记为吉隆坡和吉隆坡。当你搜索吉隆坡时,这两个词都会在你的反向索引中被搜索到。我更新了我的答案,在搜索字符串中的单词中有一个or'd响应。“or”操作符将确保如果任何单词匹配,您将得到响应。希望这有助于检查编辑后的答案,opreator:并在单词上像逻辑and一样工作。您需要使用运算符:or。尝试将其设为4或5-ES仅支持0,1,2的模糊性谢谢@SahilGupta指出,我使用的是一个非常旧的版本。谢谢您的回答。这是我尝试的第一件事,但决不是真正的前缀匹配。它使用默认的模糊性规则,因此只有在已经拼写了len-2字符时才开始工作。想象一下,如果这座城市被称为“吉隆坡”。我希望仍然可以使用“kua-lum”查询找到它。我需要前缀匹配或模糊搜索,前缀不能拼写错误。你能举一个“应该”查询的例子吗?我自己尝试过,但没有让它与“multi_match”和“wildcard”一起工作。因此,ES中的任何文本字段都会在存储到反向索引之前进行分析和标记。当您在索引中存储吉隆坡时,它会标记为吉隆坡和吉隆坡。当你搜索吉隆坡时,这两个词都会在你的反向索引中被搜索到。我更新了我的答案,在搜索字符串中的单词中有一个or'd响应。“or”操作符将确保如果任何单词匹配,您将得到响应。希望这对你有帮助 检查编辑后的答案,opreator:并在单词上像逻辑and一样工作。您需要使用运算符:或。