弹性搜索子串搜索

时间:2020-11-02 01:58:48

标签: elasticsearch full-text-search wildcard

我需要通过子字符串实现搜索。如果它的子字符串匹配,它应该像“ CTRL + F”一样突出显示一个单词。

搜索仅由两个字段执行:

  • 名称-不超过255个字符
  • 编号-不超过200个字符

但是,记录数会非常大,大约一百万。

到目前为止,我使用按通配符括起来的关键字进行查询字符串搜索,但是一旦记录数量开始增长,肯定会导致性能问题。

您有什么建议,我将如何做更多针对性能的解决方案?

1 个答案:

答案 0 :(得分:1)

在大索引上,搜索前导wildcards的过程将非常慢

避免以*或?开头的模式。这样可以增加迭代次数 需要找到匹配的词并降低搜索性能。

如文档通配符中所述,查询非常慢。 如果希望查询时间快,最好使用ngram策略。如果要按部分匹配,单词前缀或任何子字符串匹配进行搜索,最好使用n-gram tokenizer,这将改善全文搜索。

ngram分词器在遇到指定字符列表之一时首先将文本分解为单词,然后对指定长度的每个单词发射N-grams。

请仔细阅读此SO answer,其中包括一个使用ngram进行部分匹配的工作示例

相关问题