2016-09-16 130 views
0

反正有python使用phrasequery吗? 直到现在我正在使用解析器,但我想知道如何使用短语查询。Phrasequery做研究

parser = QueryParser(Version.LUCENE_CURRENT, "contents", 
         analyzer) 
parser.setDefaultOperator(QueryParser.Operator.AND) 
query = parser.parse(command) 
    scoreDocs = searcher.search(query, 10000).scoreDocs 

回答

0

首先,您应该明白,当您切出QueryParser时,会丢失分析器。 PhraseQuery不会像你的QueryParser那样为你进行分析,因此你需要对你的短语进行标记和标准化以匹配索引时间分析。你可能会更好地坚持解析器。

这就是说,构建PhraseQuery手动看起来是这样的:

query = PhraseQuery() 
query.add(Term("contents", "lorem")) 
query.add(Term("contents", "ipsum")) 
query.add(Term("contents", "sit")) 
query.add(Term("contents", "amet")) 

您可以设置斜率使用setSlop查询。

您还可以指定每个术语的位置。例如,如果“坐”是我的索引中的一个停用词,我可能会这样做:

query = PhraseQuery() 
query.add(Term("contents", "lorem"), 0) 
query.add(Term("contents", "ipsum"), 1) 
query.add(Term("contents", "amet"), 3) 
+0

但如果我需要搜索4个图表,我需要每次都这样做?对不起,我是一个新手.. – oezlem

+0

ngram通常通过在同一位置重叠多个标记来工作。您应该能够在每个位置搜索一个gram,或者通过指定它们在同一个位置搜索倍数,就像在我的第二个代码示例中一样。 – femtoRgon