【问题标题】:MultiFieldQueryParser is removing dots from the acronymMultiFieldQueryParser 正在从首字母缩写词中删除点
【发布时间】:2009-03-18 22:05:18
【问题描述】:

由于我的问题没有得到回答,所以我再次发布这个问题。

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

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

谢谢。

【问题讨论】:

    标签: lucene lucene.net


    【解决方案1】:

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

    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>)
    

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

    【讨论】:

      【解决方案2】:

      (我只熟悉java lucene,但我想在这种情况下没关系。)

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

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

      祝你好运。 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        相关资源
        最近更新 更多