部分单词的文档搜索

Posted

技术标签:

【中文标题】部分单词的文档搜索【英文标题】:Document search on partial words 【发布时间】:2011-08-12 18:45:32 【问题描述】:

我正在寻找能够搜索部分术语的文档搜索引擎(如 Xapian、Whoosh、Lucene、Solr、Sphinx 或其他)。

例如,当搜索“brit”一词时,搜索引擎应返回包含“britney”或“britain”的文档,或者通常包含与 r*brit* 匹配的词的任何文档

我注意到大多数引擎都使用 TF-IDF(词频-逆文档频率)或其基于完整词而不是部分词的派生词。除了 TF-IDF 之外,还有没有其他成功实现文档检索的技术?

【问题讨论】:

我建议您将搜索引擎标签添加到您的问题、lucene、Xapian 或至少搜索引擎中。搜索是一个通用标签,对搜索引擎感兴趣的人可能会厌倦阅读各种与搜索引擎无关的问题的奇怪请求。祝你好运! 感谢您的建议。添加了更多标签。 您没有阅读各种引擎文档的任何原因。 Lucene(以及 Solr)支持通配符搜索:wiki.apache.org/lucene-java/… 【参考方案1】:

使用 lucene,您可以通过多种方式实现这一点:

1.) 您可以使用通配符查询*brit*(您必须将查询解析器设置为允许前导通配符)

2.) 您可以创建一个包含N-Grams of all the terms 的附加字段。这会产生更大的索引,但在许多情况下会更快(搜索速度)。

3.) 您可以使用模糊搜索来处理查询中的输入错误。例如有人输入了britnei,但想找到britney

对于通配符查询和模糊搜索,请查看query syntax docs。

【讨论】:

如何在查询开头使用“*”? 你必须告诉查询解析器允许这些类型的查询。使用函数 setAllowLeadingWildcard 来做到这一点。 lucene.apache.org/core/4_0_0/queryparser/org/apache/lucene/…

以上是关于部分单词的文档搜索的主要内容,如果未能解决你的问题,请参考以下文章

搜索引擎基础概念—— 倒排列表

ElasticSearch如何使用 ElasticSearch 搜索单词的一部分 模糊搜索 正则匹配 前缀匹配

从搜索文档中查找最小片段的算法?

搜索引擎-倒排索引基础知识

搜索引擎基础概念—— 构建单词词典

搜索引擎-倒排索引基础知识