使用MultiFieldQueryParser

时间:2009-03-17 03:40:16

标签: lucene lucene.net

使用MultiFieldQueryParser解析字符串,如a.a.,b.b。等 但解析后,它删除字符串中的点。 我在这里缺少什么?

感谢。

3 个答案:

答案 0 :(得分:2)

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

我知道任何查询解析器,像'a.a.'这样的字符串和'b.b.'会删除句点,因为至少在默认的Analyzer中,所有标点都被视为空格。

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

  

标题:“老鼠和男人”“John Steinbeck”

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

(从the dupe重复我的回答。其中一个应删除)。

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

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

以下是我用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>)

请注意,例如,如果首字母缩略词不以点结尾,则分析器假定它是互联网主机名,因此搜索“C.F.A”将与“C.F.A”不匹配。在文中。