search - 在 PhraseQuery 中使用停用词进行 Lucene 搜索不返回结果
问题描述
我在搜索停用词时遇到问题!(that、at 等)
我正在使用 StandardAnalyzer 来索引诸如“出生时姓氏”之类的文本。当我使用带有短语“出生时姓氏”的 PhraseQuery 搜索(使用 StandardAnalyzer)时,我没有收到任何结果。这是我创建 PhraseQuery 的代码:
foreach(var word in search.Trim().Split(' '))
{
phraseQuery.Add(new Term("content", word.ToLowerInvariant()));
}
当没有结果时,我正在调整斜率。
例如,如果我搜索“出生姓氏”,我会得到包含“出生时姓氏”的结果。
就像 StopWord "at" 阻止了结果
解决方案
停用词也必须在查询时删除。如果您不这样做,那么任何需要该单词存在的查询都不会匹配任何文档。停用词删除是在分析时完成的,还应该对查询进行分析以获取将要搜索的术语。(这对于词干、不区分大小写也是必需的。)
在 analysys 之后,类似“Surname At Birth”(带引号)的查询将被转换为 PhraseQuery“Surname * Birth”(中间有一个“洞”,使用第一个标记上的“位置增量”属性)。
我假设您使用的是 Lucene.NET,因此请查看https://lucenenet.apache.org/docs/4.8.0-beta00009/api/queryparser/overview.html上的文档以使用查询解析器进行查询。
推荐阅读
- javascript - 使用 ReactJs 的组件未在移动设备中拖动(使用 onTouch、onDrag、onMouse 的事件)
- java - 验证来自 OneLogin 的 SAML 响应中的签名
- android - 在android中以编程方式声明时,微光在卡片视图中显示黑色边缘
- vodapay-miniprogram - 您可以从 VodaPay 小程序的当前页面访问数据对象吗?
- java - JPQL/ Hibernate 对二级子数据进行排序和过滤
- rust - 如何清除或删除 Rust 中的 io::stdin 缓冲区?
- youtube - YouTube 数据 API V3 中的配额问题
- pyspark - 如何实际限制或削减 PySpark DataFrame
- c++ - 尝试模块化一些标准头文件c ++时出现编译错误
- objective-c - 如何使用 PHPickerViewControllerDelegate 获取本地库中视频的缩略图和数据