【问题标题】:Lucene multiphrasequery search with wildcard使用通配符的 Lucene 多短语查询搜索
【发布时间】:2013-08-07 13:01:52
【问题描述】:

我一直在尝试进行 lucene 搜索查询,其中输入“Foo B”将返回“Foo Bar”、Foo Bear、Foo Build”等,但不会返回 ID 为“Foo”和单词的记录“栏”在说它的“描述”字段。

我研究了 multiphrasequery,但它从不返回任何结果,下面是我一直在尝试的

        Term firstTerm = new Term("jobTitle", "Entry");
        Term secondTerm = new Term("jobTitle", "Artist");
        Term asdTerm = new Term(fld)

        Term[] tTerms = new Term[]{firstTerm, secondTerm};
        MultiPhraseQuery multiPhrasequery = new MultiPhraseQuery();
            multiPhrasequery.add( tTerms );

             org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(multiPhrasequery, this.type).setSort(sort);
         results = hibQuery.list();

【问题讨论】:

    标签: search lucene wildcard multiple-columns phrase


    【解决方案1】:

    我看到的可能问题是大写。 "Entry""Artist" 不会通过查询解析器传递,因此不会通过分析器运行,因此区分大小写。您正在索引的字段可能会使用包含LowercaseFilter 的分析器进行分析,因此结尾术语不会包含前导大写字母。在不知道您如何为文档编制索引的情况下,我不能说这可以肯定地解决它,但这似乎是最有可能的。

    修复后,您创建的查询应该与 jobTitle 字段中的 "entry""artist" 匹配。

    【讨论】:

    • 谢谢,这确实回答了我的问题,但它也告诉我这仍然不是我需要去的路线,因为我只需要在一个字段中而不是在一个字段中获得“搜索短语”的结果来自 x 字段的“搜索”和来自原因的“短语”,或者只有一个术语的条目,谢谢!
    • 我认为问题在于您误解了MultiPhraseQuery 的工作原理。 add({term1, term2}); 在短语中的相同位置添加两者作为替代。 add(term1); add(term2); 将它们添加到连续的位置,这可能是您正在寻找的。我建议仔细阅读本课程的documentation
    • 是的,我只是在寻找人们使用通配符等进行短语搜索的实际方式,并发现了如此多不同(而且很多时候已经过时)的结果,令人眼花缭乱。我尝试像 add(term1); 一样单独添加它们;添加(术语2);但它不返回任何东西。
    • Just found this from lucene "要使用这个类,要搜索短语"Microsoft app*",首先在术语"Microsoft"上使用add(Term),然后找到所有具有"app “使用 IndexReader.terms(Term) 作为前缀,并使用 MultiPhraseQuery.add(Term[] terms) 将它们添加到查询中。”我觉得这是非常低效的,做一个初始查询然后查询这些结果的每个组合
    • 这正是 Lucene 处理通配符查询的方式,它通过枚举符合该条件的术语并生成“原始查询”,例如 BooleanQueryTermQuery,然后针对索引运行这些查询。但是,您不想查询它,不,您想从AtomicReader.terms("field").iterator(TermsEnum); 获取TermEnum,然后使用seekCeil 方法寻求对您需要枚举的条款的权利以包含在您的MultiPhraseQuery 中.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多