当前位置: 首页 > 知识库问答 >
问题:

带有“-”字符的Lucene索引问题

杜翰林
2023-03-14

它对一些包含“-”的词有效,但不是对所有的词都有效,我不知道为什么它不起作用。

我正在搜索的字段是经过分析的,其中包含有“-”字符和没有“-”字符的单词版本。

我正在使用分析器:org.apache.lucene.analysis.standard.StandardAnalyzer

如果我搜索没有“*”的“v-strom”,它可以工作,但如果我只搜索“v-str”,例如,我不会得到结果。(应该会有一个结果,因为它是为了在线搜索一个网店)

那么,两个预期结果之间有什么不同呢?为什么它适用于“GSX-”而不适用于“V-”?

共有1个答案

康弘义
2023-03-14

我相信StandardAnalyzer会将连字符视为空格。因此,它将查询“gsx-*”变为“gsx*”而将查询“v-*”变为零,因为at还消除了单字母标记。您在搜索结果中看到的字段内容是字段的存储值,它完全独立于为该字段索引的术语。

所以你想要的是“v-strom”作为一个整体,成为一个索引术语。StandardAnalyzer不适合此类文本。也许可以使用WhitespaceAnalyzerSimpleAnalyzer。如果这仍然不能解决问题,您还可以选择将自己的分析器组合在一起,或者从这两个分析器开始,再用tokenfilters组合它们。Lucene分析包Javadoc中给出了很好的解释。

顺便说一句,不需要在索引中输入所有的变体,比如V-strom,V-strom等。这个想法是让同一个分析器在索引中和解析查询时将所有这些变体规范化为同一个字符串。

 类似资料:
  • 下面的lucene查询返回空字符串请帮忙,提前谢谢

  • 当我搜索“#”等特殊字符时,没有结果出现。 请注意,我已经转义了查询字符串。 然而,当与“c#”这样的字母组合时,Lucene找到了这个词。 有没有办法搜索单个特殊字符? 这是我的片段:

  • bugu-mongo 2.x版本集成了Lucene的功能。当往MongoDB中新增一个Document时,能自动为该Document建立Lucene索引。相应的,当MongoDB中的Document被修改、删除时,对应的Lucene索引也会修改、删除。 另外,bugu-mongo还提供了对Lucene搜索的支持。根据Lucene索引进行搜索的时候,搜索结果能自动转换成对应的Entity对象。 在L

  • 问题内容: 是否可以在Python数组中使用字符串作为索引? 例如: 问题答案: 您想要的称为关联数组。在python中,这些被称为字典。 词典有时在其他语言中被称为“关联记忆”或“关联数组”。与用数字范围索引的序列不同, 字典是用键索引的,键可以是任何不可变的类型 ;字符串和数字始终可以是键。 创建上述字典的另一种方法: 访问值: 获取密钥(在Python v2中): 在Python 3中,您将

  • 问题内容: 在不使索引离线的情况下备份Lucene索引的最佳实践是什么(热备份)? 问题答案: 您不必停止IndexWriter即可备份索引。 只需使用SnapshotDeletionPolicy,它就可以“保护”给定的提交点(及其包含的所有文件),以免被删除。然后,将该提交点中的文件复制到您的备份中,最后释放该提交。 如果备份需要一段时间才能运行,这很好- 只要您不使用SnapshotDelet

  • 假设我有两组对象“Questions”和“Users”,它们共享一个关系。 什么是最好的方法索引我的对象,以允许最新的变化反映在lucene IDEX? 是否应该为用户和问题提供单独的文档,并让lucene根据需要获取所需的问题/用户详细信息? 还是,走数据传输对象的方式?当发生更改时,只需删除这些文档并重新索引?