【问题标题】:Lucene search with Stop words in PhraseQuery doesn't return results在 PhraseQuery 中使用停用词进行 Lucene 搜索不返回结果
【发布时间】:2020-07-15 10:04:04
【问题描述】:

我在搜索停用词时遇到问题!(that、at 等)

我正在使用 StandardAnalyzer 为“出生时的姓氏”之类的文本编制索引。 当我使用带有短语“出生时姓氏”的 PhraseQuery 搜索(使用 StandardAnalyzer)时,我没有收到任何结果。 这是我创建 PhraseQuery 的代码:

                foreach(var word in search.Trim().Split(' '))
                {
                    phraseQuery.Add(new Term("content", word.ToLowerInvariant()));
                }

当没有结果时,我正在调整坡度。

例如,如果我搜索“出生姓氏”,我会得到包含“出生时姓氏”的结果。

就像 StopWord "at" 阻止结果

【问题讨论】:

    标签: search lucene lucene.net


    【解决方案1】:

    在查询时也必须删除停用词。如果您不这样做,那么任何需要该单词存在的查询都不会匹配任何文档。停用词删除是在分析时完成的,还应该对查询进行分析以获取将要搜索的术语。 (这也是词干提取、不区分大小写的必要条件。)

    analysys 之后,类似“Surname At Birth”(带引号)的查询将转换为 PhraseQuery“Surname * Birth”(中间有一个“洞”,使用第一个标记上的“位置增量”属性) )。

    我假设您使用的是 Lucene.NET,因此请查看https://lucenenet.apache.org/docs/4.8.0-beta00009/api/queryparser/overview.html 的文档以使用查询解析器进行查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 2022-07-21
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 2021-10-14
      相关资源
      最近更新 更多