1

谢谢阅读 :)

我正在尝试使用 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

请帮忙。

4

2 回答 2

0

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

请参阅:关键字分析器

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

于 2012-08-10T17:13:05.897 回答
0

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

选项1

从 StandardTokenizer 的语法文件开始并对其进行自定义,以便它发出由 '_' 分隔的文本作为单个标记。(请参阅使用 JFlex/Java CC 为新的 TokenStream API 生成自定义标记器)。使用这个新的 Tokenizer 和 LowerCaseFilter 构建您的分析器。

选项 2

编写一个由 WhiteSpaceTokenizer 和自定义 TokenFilters 组成的自定义分析器。在这些 TokenFilters 中,您决定如何处理 WhiteSpaceTokenizer 返回的令牌。

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

于 2012-08-12T12:33:25.940 回答