MultiFieldQueryParser正在从首字母缩略词中删除点

时间:2009-03-18 22:05:19

标签: lucene lucene.net

我再次发布此问题,因为我的查询未得到解答。

正在使用Lucene编写图书搜索API。 用户可以搜索标题或说明字段包含C.F.A的图书... 我使用StandardAnalyzer以及停用词列表。

使用MultiFieldQueryParser解析string.But解析后,删除字符串中的点。我在这里缺少什么?

感谢。

2 个答案:

答案 0 :(得分:7)

正如你所提到的,这是this question的欺骗。我建议你至少在你的问题中添加一个链接。此外,我建议您创建一个用户帐户,因为现在无法查看旧问题以获取上下文。

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”不匹配。在文中。

答案 1 :(得分:1)

(我只熟悉java lucene,但我想在这种情况下并不重要。)

分析器的目的是去除阻止有效全文搜索的字符和格式。例如,如果您编写的文档中只将lucene称为“lucene.net”,那么您可能希望lucene仅返回“lucene”的搜索命中率。因此,StandardAnalyzer会剥离点(以及其他一些特殊字符)。

不过不用担心。与lucene一样,这可以配置,在这种情况下,通过选择不同的分析仪。请尝试使用SimpleAnalyzer或KeywordAnalyzer,并查看哪一个最接近您所需的行为。如果他们都不这样做,您甚至可以使用分析仪界面实现自己的自定义分析仪。它实际上非常简单。

祝你好运。 :)

相关问题