在Lucene中搜索“UTTD_Equip_City_TE”之类的单词

时间:2012-08-10 17:01:11

标签: java lucene rtf

感谢阅读:)

我正在尝试使用Lucene在RTF文档中搜索“UTTD_Equip_City_TE”等字词。这个词以两种不同的形式出现:

  • «UTTD_Equip_City_TE»,
  • «UTTD_Equip_City_TE»

我首先尝试使用StandardAnalyzer,但它似乎将这个词分解为“UTTD”,“Equip”,“City”和“TE”。

然后我再次尝试使用WhiteSpaceAnalyzer,但它似乎没有工作......(我不知道为什么)。

你能帮助我吗?我应该解决这个问题吗?顺便说一句,编辑Lucene源并使用Ant重新编译它不是一个选项:(

感谢。

编辑:本文档中还有其他文本。例如:

SHIP TO LESSEE (EQUIPMENT location address): «UTTD_Equip_StreetAddress_TE», «UTTD_Equip_City_TE», «UTTD_Equip_State_MC» 

基本上,我正在尝试索引RTF文件,并且每个RTF文件内部都是带变量的表。变量包含«»。我正在尝试在文档中搜索这些变量。我试过搜索"«" + string + "»",但它没有用...

此示例可以提供更好的图片:http://i.imgur.com/SwlO1.png

请帮忙。

2 个答案:

答案 0 :(得分:0)

KeywordAnalyzer将整个字段标记为单个字符串。如果子字符串位于文档中的不同字段中,听起来这可能是您正在寻找的内容。

请参阅:KeywordAnalyzer

相反,如果您要在单个字段中添加文档的整个内容,并且想要搜索其中嵌入了“_”字符的子字符串,那么我认为WhitespaceAnalyzer可以正常工作。但你表示它不起作用。您能告诉我们您尝试使用WhitespaceAnalyzer时的结果吗?你是否将它用于索引和查询?

答案 1 :(得分:0)

我在这里看到两个选项。在这两种情况下,您都必须构建自定义分析器。

选项1

从StandardTokenizer的语法文件开始并对其进行自定义,以便它将由“_”分隔的文本作为单个标记发出。 (参考Generating a custom Tokenizer for new TokenStream API using JFlex/ Java CC)。使用这个新的Tokenizer和LowerCaseFilter构建您的Analyzer。

Oprion 2

编写由WhiteSpaceTokenizer和自定义TokenFilters组成的自定义分析器。在这些TokenFilters中,您决定如何对WhiteSpaceTokenizer返回的令牌采取行动。

有关分析的详细信息,请参阅http://lucene.apache.org/core/3_6_0/api/core/org/apache/lucene/analysis/package-summary.html