【问题标题】:full text search with spelling changes/mistakes带有拼写更改/错误的全文搜索
【发布时间】:2011-04-14 06:29:42
【问题描述】:

我们有很多对象,每个对象都有大约 100-200 字的描述。 (例如一本书的作者姓名和小摘要)。

用户将输入作为单词的系列。如何使用近似文本和较小的拼写更改实现搜索?例如“Joshua Bloch”、“Joshua blosh”、“joshua block”可能会导致相同的文本结果。

【问题讨论】:

标签: java indexing full-text-search


【解决方案1】:

如果您使用 Lucene 进行全文搜索,“Did you mean”扩展名可能就是您想要的。

【讨论】:

    【解决方案2】:

    如何使用近似文本和微小的拼写更改来实现搜索?例如“Joshua Bloch”、“Joshua blosh”、“joshua block”可能会导致相同的文本结果。

    您的数据库是否支持 Soundex? Soundex 将匹配发音相似的单词,这似乎符合您上面给出的示例。即使您的数据库没有本机 soundex,您仍然可以编写一个实现并将每个作者姓名的 soundex 保存在单独的字段中。这可以用于以后匹配。

    但是,Soundex 不能替代全文搜索;它只会在特定情况下帮助作者姓名。如果您想从书中的简介中找到一些特定的文本,那么最好使用全文搜索选项(如Postgresql's)。

    【讨论】:

      【解决方案3】:

      如果您正在寻找此功能的实际实现,这里有一个由 Peter Norvig 编写的精彩程序:http://norvig.com/spell-correct.html

      它还包含许多其他语言的实现链接,包括 Java、C 等。

      【讨论】:

        【解决方案4】:

        您可以使用拼写检查器JOrtho。从数据库中的上下文中,您可以生成自定义字典并进行设置。然后所有不在字典中且不在您的数据库中的单词都被标记为拼写错误。

        【讨论】:

          【解决方案5】:

          请检查Solr,而不是Lucene。 Lucene 是一个库,您可以使用它在应用程序中嵌入搜索功能。 Solr 是 Lucene 的实际实现,您可以通过 API 直接将其插入您的应用程序。对于大多数系统,Solr 将省去处理 Lucene 的复杂性。

          【讨论】:

            【解决方案6】:

            Apache Lucene 可能符合您的要求。它是完全用 Java 编写的高性能、完整的测试搜索引擎库。

            【讨论】:

              猜你喜欢
              • 2020-05-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-03-19
              • 2021-10-05
              • 2011-11-04
              • 1970-01-01
              • 2011-05-02
              相关资源
              最近更新 更多