在Lucene中使用ComplexPhraseQueryParser的多个字段

时间:2012-01-10 15:32:42

标签: java lucene hibernate-search

我目前正在使用Lucene的MultiFieldQueryParser在多个字段中搜索相同的查询(即搜索“value”会产生field1:value field2:value field3:value)。但是,这会使用QueryParser标准not support wild card searches within phrases(即“测试短语*”)。所以我试图使用contrib / misc包中的ComplexPhraseQueryPhrase,它确实支持它。但是,这只允许您一次搜索一个字段,就像QueryParser一样。

所以我一直试图将两者结合起来,制作一个MultiFieldComplexPhraseQueryParser,但我还没有取得任何成功。有没有人做过这样的事情或有任何关于如何做的建议?谢谢!

1 个答案:

答案 0 :(得分:0)

我实际上是通过使用MultiFieldQueryParser(Lucene 3.0.3)获得成功的:

public class MultiFieldQueryParserTests {
    @Test
    public void testMultiFieldQueryParser() throws Exception {
        MultiFieldQueryParser parser = new MultiFieldQueryParser(Version.LUCENE_30, 
                                                                        new String[] { "field1", "field2", "field3" },
                                                                        new WhitespaceAnalyzer());
        Query q = parser.parse("test phrase*");
        System.out.println("query " + q);
        q = parser.parse("\"test phrase*\"");
        System.out.println("query " + q);
    }
}

结果是:

query (field1:test field2:test field3:test) (field1:phrase* field2:phrase* field3:phrase*)
query field1:"test phrase*" field2:"test phrase*" field3:"test phrase*"

或者我在这里错过了什么?