【问题标题】:Elastic Search substring search弹性搜索子字符串搜索
【发布时间】:2020-11-02 01:58:48
【问题描述】:

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

搜索将仅由两个字段执行:

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

但是,记录的数量将非常大,大约有一百万。

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

你有什么建议我将如何做更多的性能明智的解决方案?

【问题讨论】:

    标签: elasticsearch full-text-search wildcard


    【解决方案1】:

    在大型索引上搜索前导 wildcards 会非常慢

    避免以 * 或 ? 开头的模式。这可以增加迭代次数 需要找到匹配的字词和缓慢的搜索性能。

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

    每当遇到指定字符列表中的一个时,ngram 分词器首先将文本分解为单词,然后发出指定长度的每个单词的 N-gram。

    请浏览此SO answer,其中包括使用 ngram 进行部分匹配的工作示例

    【讨论】:

    • @Petr Savchenko 你有机会看我的回答吗,期待得到你的反馈?
    • 感谢@Bhavya,看起来 n-gram 标记器会是更好的解决方案。我还找到了wildcard field type,这是另一种选择。我很想比较这两个
    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    相关资源
    最近更新 更多