Java 如何从Lucene索引中排除数字?
我正在开发一个信息检索应用程序,使用Lucene 5.3.1(目前最新版本),我设法为文本文件中的术语编制索引,然后在其中进行搜索。文本文件恰好包含章节号,如Java 如何从Lucene索引中排除数字?,java,lucene,Java,Lucene,我正在开发一个信息检索应用程序,使用Lucene 5.3.1(目前最新版本),我设法为文本文件中的术语编制索引,然后在其中进行搜索。文本文件恰好包含章节号,如2.1,3.4.2等等 问题是,我不需要对这些数字进行索引,因为我不需要搜索它们,而且我还无法找到如何从标记化中排除某些术语,我知道分析器使用StopWords集排除几个术语,但据我所知,它对数字没有任何作用。我能想到的最简单的答案是——在索引之前从文本中删除数字。您可以使用正则表达式来实现这一点。此解决方案有一个副作用–PositionI
2.1
,3.4.2
等等
问题是,我不需要对这些数字进行索引,因为我不需要搜索它们,而且我还无法找到如何从标记化中排除某些术语,我知道
分析器使用StopWords集排除几个术语,但据我所知,它对数字没有任何作用。我能想到的最简单的答案是——在索引之前从文本中删除数字。您可以使用正则表达式来实现这一点。此解决方案有一个副作用–
PositionIncrementAttribute将在没有这些数字的情况下计算,因为它们不会出现在文本中。这可能会破坏您的一些短语查询
另一个选项,如前所述–编写自定义TokenFilter
以去除数字。但你应该记住:
- 调整
分析器
以不分解点上的术语。否则,2.1
将是两个术语,而不是一个术语。这同样会导致短语查询出现问题
李>
- 正确更改
PositionIncrementAttribute
(递增)的值,同时从TokenStream
中删除术语
我能想到的最简单的答案是:在索引之前从文本中删除数字。您可以使用正则表达式来实现这一点。此解决方案有一个副作用–
PositionIncrementAttribute将在没有这些数字的情况下计算,因为它们不会出现在文本中。这可能会破坏您的一些短语查询
另一个选项,如前所述–编写自定义TokenFilter
以去除数字。但你应该记住:
- 调整
分析器
以不分解点上的术语。否则,2.1
将是两个术语,而不是一个术语。这同样会导致短语查询出现问题
李>
- 正确更改
PositionIncrementAttribute
(递增)的值,同时从TokenStream
中删除术语
没有单一的分析器
-您可以编写自己的,或者只编写一个标记过滤器
,以去除您不希望被索引的内容。没有单一的分析器
-您可以编写自己的,或者只编写一个标记过滤器
,以去除您不希望被索引的内容。