在Lucene内搜索原始文本而不使用任何分析器

时间:2013-06-11 05:38:08

标签: java lucene

我使用分析器构建了Lucene索引。我正在使用索引来搜索内容,在大多数情况下我需要一个分析器。

现在,在少数情况下,如果我想在没有分析器效果的情况下在字段中查找文本,是否仍然可以查看相同索引的字段?我该如何构建查询?

如果我使用wildcardquery,它仍然会查看分析的文本,而我想在原始文本中进行搜索。

2 个答案:

答案 0 :(得分:4)

您在评论中描述的案例表明您正在使用带有Stemmer的分析仪。可能是EnglishAnalyzer(其中包含PorterStemmer)。而不是没有一个分析器,这将导致一个未加密的领域,使搜索变得困难,我会研究那些不干扰的分析器。

  • StandardAnalyzer - 一个很好的标准,实现unicode standard text segmentation,主要是非语言特定的。
  • SimpleAnalyzer - 如图所示的非常简单的分析仪。标记为连续字母组,并将它们缩小。警告:此令牌化程序会丢失数字!
  • WhitespaceAnalyzer - 也非常简单,简单地在空格周围创建标记。不小写或以其他方式标准化令牌。这通常太简单而无法使用。
  • ClassicAnalyzer - 实现3.X中曾经是StandardAnalyzer的逻辑。仍然是一个有用的分析仪。

如果你真的不想使用分析器,只需使用StringField绕过任何标记化或分析。

答案 1 :(得分:1)

我建议使用包含默认分析器的文档的字段构建索引,并建议使用WhitespaceAnalyzer

的索引

您可以创建此http://lucene.apache.org/core/4_0_0-BETA/analyzers-common/org/apache/lucene/analysis/miscellaneous/PerFieldAnalyzerWrapper.html

如果您需要精确搜索,请使用whitespacetokenizer在字段中搜索,否则请使用包含分析器处理的文本的字段