【发布时间】:2015-12-27 10:17:26
【问题描述】:
我正在使用带有 SpanishAnalyzer 的 lucene 3.5(它本身使用 SpanishStemmer 和 StandardTokenizer)。
当 SpanishAnalyzer 索引包含单词(例如)“claramente”和“claro”的文档时,它们都将被索引为“clar”。
这种行为被理解并且对我的需求很有用,今天在查询之前,我使用分析器的tokenStream + incrementToken() 来获取我的搜索词的标记并针对索引文档进行搜索。我没有使用 QueryParser,而是在代码中构建 lucene 查询对象。
但是,我希望能够搜索确切的单词(在此示例中为 claro),而不会失去 SpanishAnalyzer 的形态学能力。
我可以跳过上面的步骤(tokenStream)并直接搜索“claro”,但它不会被找到,因为它被索引为“clar”。
此外,我不想使用 2 个不同的分析器对该字段进行两次索引,因为我需要能够使用包含一个精确单词和一个常规术语(形态学)的 PhraseQuery 或 SpanNearQuery。
所以……我要说到点子上了……我想修改 Tokenizer 或 Stemmer 或 Filter (?) 所以在索引时间它将为每个单词索引 2 个标记,词干一个和原始一个,在这种情况下“claro " 和 "clar" 以及以后查询时,我可以选择是使用确切的单词还是词干标记。
我需要帮助了解如何(以及在哪里)我可以做到这一点,我想编辑应该在 Stemmer 的某个地方完成。
顺便说一句,我在使用 incrementToken() 时为文本中的每个单词返回多个标记的希伯来语分析器完全相同(但我没有源代码)
【问题讨论】:
标签: java lucene query-analyzer