首页 > 解决方案 > 在 PhraseQuery 中使用停用词进行 Lucene 搜索不返回结果

问题描述

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

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

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

当没有结果时,我正在调整斜率。

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

就像 StopWord "at" 阻止了结果

标签: searchlucenelucene.net

解决方案


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

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

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


推荐阅读