我需要通过子字符串实现搜索。它应该像“CTRL + F”一样工作,如果它的子字符串匹配它,它会突出显示一个单词。
搜索将仅由两个字段执行:
- 名称 - 不超过 255 个字符
- ID - 不超过 200 个字符
但是,记录的数量将非常大,大约有一百万。
到目前为止,我正在使用用通配符包装的关键字进行查询字符串搜索,但是一旦记录数量开始增长,它肯定会在以后导致性能问题。
你有什么建议我将如何做更多的性能明智的解决方案?
我需要通过子字符串实现搜索。它应该像“CTRL + F”一样工作,如果它的子字符串匹配它,它会突出显示一个单词。
搜索将仅由两个字段执行:
但是,记录的数量将非常大,大约有一百万。
到目前为止,我正在使用用通配符包装的关键字进行查询字符串搜索,但是一旦记录数量开始增长,它肯定会在以后导致性能问题。
你有什么建议我将如何做更多的性能明智的解决方案?
在大型索引上使用前导通配符进行搜索将非常缓慢
避免以 * 或 ? 开头的模式。这会增加查找匹配项所需的迭代次数并降低搜索性能。
正如文档中所写,通配符查询非常慢。如果您希望它在查询时快速,最好使用 ngram 策略。如果您想通过部分匹配、单词前缀或任何子字符串匹配进行搜索,最好使用n-gram tokenizer,这将改善全文搜索。
每当遇到指定字符列表中的一个时,ngram 标记器首先将文本分解为单词,然后发出指定长度的每个单词的 N-gram。
请仔细阅读这个SO 答案,其中包括使用 ngrams 进行部分匹配的工作示例