Lucene MultiFieldQueryParser正在删除首字母缩略词中的圆点

Lucene MultiFieldQueryParser正在删除首字母缩略词中的圆点,lucene,lucene.net,Lucene,Lucene.net,我再次发布这个问题,因为我的问题没有得到回答 我正在使用Lucene开发一个图书搜索api。 用户可以搜索其标题或描述字段包含C.F.a。。。 我正在使用StandardAnalyzer和一系列停止词 我使用MultiFieldQueryParser来解析上面的字符串。但是解析之后,它会删除字符串中的点。我错过了什么 谢谢。(我只熟悉java lucene,但我想在这种情况下这并不重要。) 分析器的目的是去除阻止有效全文搜索的字符和格式。例如,如果您编写的文档只将lucene称为“lucene.

我再次发布这个问题,因为我的问题没有得到回答

我正在使用Lucene开发一个图书搜索api。 用户可以搜索其标题或描述字段包含C.F.a。。。 我正在使用StandardAnalyzer和一系列停止词

我使用MultiFieldQueryParser来解析上面的字符串。但是解析之后,它会删除字符串中的点。我错过了什么

谢谢。

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

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

不过别担心。与lucene一样,这可以通过选择不同的分析器进行配置。尝试改用SimpleAnalyzer或KeywordAnalyzer,看看哪一个最接近您想要的行为。如果两者都不行,您甚至可以使用analyzer接口实现自己的自定义analyzer。其实很简单


祝你好运

正如你提到的,这是一个骗局。我建议你至少在你的问题中添加一个链接。另外,我建议您创建一个用户帐户,因为现在不可能通过查看您的旧问题来了解上下文

StandardAnalyzer
专门处理首字母缩写词,并将C.F.A.(例如)转换为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>)
(cfa,0,6,类型=)
(c.f.a,7,12,类型=)
(word,13,17,type=)
例如,请注意,如果首字母缩写词不以点结尾,则分析器会假定它是internet主机名,因此搜索“C.F.a”将与文本中的“C.F.a.”不匹配