弹性搜索子串搜索
Elastic Search substring search
我需要实现子字符串搜索。它应该像“CTRL + F”一样工作,如果它的子字符串匹配它就会突出显示一个单词。
搜索将仅由两个字段执行:
- 名称 - 不超过 255 个字符
- Id - 不超过 200 个字符
但是,记录的数量将非常大,大约一百万。
到目前为止,我使用的是通过用通配符包裹的关键字进行查询字符串搜索,但是一旦记录数量开始增长,它肯定会在以后导致性能问题。
您有什么建议吗?我该如何做更明智的性能解决方案?
在大索引上使用前导搜索 wildcards 会非常慢
Avoid beginning patterns with * or ?. This can increase the iterations
needed to find matching terms and slow search performance.
如文档中所写,通配符查询非常慢。
如果您希望它在查询时快速,最好使用 ngram 策略。如果您想通过部分匹配、单词前缀或任何子字符串匹配进行搜索,最好使用 n-gram tokenizer,这将改进 full-text 搜索。
每当遇到指定字符列表中的一个时,ngram 分词器首先将文本分解为单词,然后它发出 N-grams 个指定长度的单词。
请仔细阅读此 ,其中包括使用 ngrams
进行部分匹配的工作示例
我需要实现子字符串搜索。它应该像“CTRL + F”一样工作,如果它的子字符串匹配它就会突出显示一个单词。
搜索将仅由两个字段执行:
- 名称 - 不超过 255 个字符
- Id - 不超过 200 个字符
但是,记录的数量将非常大,大约一百万。
到目前为止,我使用的是通过用通配符包裹的关键字进行查询字符串搜索,但是一旦记录数量开始增长,它肯定会在以后导致性能问题。
您有什么建议吗?我该如何做更明智的性能解决方案?
在大索引上使用前导搜索 wildcards 会非常慢
Avoid beginning patterns with * or ?. This can increase the iterations needed to find matching terms and slow search performance.
如文档中所写,通配符查询非常慢。 如果您希望它在查询时快速,最好使用 ngram 策略。如果您想通过部分匹配、单词前缀或任何子字符串匹配进行搜索,最好使用 n-gram tokenizer,这将改进 full-text 搜索。
每当遇到指定字符列表中的一个时,ngram 分词器首先将文本分解为单词,然后它发出 N-grams 个指定长度的单词。
请仔细阅读此