1

我正在使用 MultiFieldQueryParser 来解析 aa、bb 等字符串但是在解析之后,它会删除字符串中的点。我在这里想念什么?

谢谢。

4

3 回答 3

2

我不确定 MultiFieldQueryParser 是否按照您的想法执行。另外...我不确定我知道您要做什么。

我确实知道,对于任何查询解析器,像“aa”和“bb”这样的字符串都会去掉句点,因为至少在默认的分析器中,所有标点符号都被视为空格。

就 MultiFieldQueryParser 而言,这只是一个允许您指定多个默认字段进行搜索的 QueryParser。所以用查询

标题:“人鼠之间”“约翰·斯坦贝克”

将在所有默认字段中查找字符串“John Steinbeck”,而仅在标题字段中搜索“Of Mice and Men”。

于 2009-03-17T03:47:47.303 回答
1

您的解析器使用什么分析器?如果它是 StopAnalyzer,那么该点可能是一个停用词,因此被忽略。如果它是清理输入(包括删除点)的 StandardAnalyzer,也是如此。

于 2009-03-17T03:46:17.633 回答
1

(重复我从骗子的回答。应该删除其中之一)。

专门处理首StandardAnalyzer字母缩略词,并将 CFA(例如)转换为 cfa。这意味着您应该能够进行搜索,只要您确保使用相同的分析器进行索引和查询解析。

我建议您运行一些更基本的测试用例来消除其他因素。尝试使用普通用户QueryParser而不是多字段用户。

这是我写的一些代码来玩StandardAnalyzer

StringReader testReader = new StringReader("C.F.A. C.F.A word");
StandardAnalyzer analyzer = new StandardAnalyzer();
TokenStream tokenStream = analyzer.tokenStream("title", testReader);
System.out.println(tokenStream.next());
System.out.println(tokenStream.next());
System.out.println(tokenStream.next());

顺便说一下,这个输出是:

(cfa,0,6,type=<ACRONYM>)
(c.f.a,7,12,type=<HOST>)
(word,13,17,type=<ALPHANUM>)

请注意,例如,如果首字母缩略词不以点结尾,则分析器会假定它是 Internet 主机名,因此搜索“CFA”将不会匹配文本中的“CFA”。

于 2009-03-19T14:52:24.827 回答