lucene spanquery匹配相同的单词

时间:2015-03-05 12:58:36

标签: lucene

我有一个系统使用lucene根据用户提供的查询搜索文档。 当用户的查询包含多个单词时,我创建一个SpanNearQuery,每个单词作为term,最后一个术语是前缀查询的包装(和span = 0)。 例如,如果用户输入是 “新y” 这应该与“新年”和“纽约”相匹配

这样可行,但如果查询的相同的字两次,例如“bora bora”, 即使是有一个“bora”外观的文件也是匹配的。

我怎样才能匹配“bora bora *”?

代码:

String[] words = querystr.split(" ");           
SpanQuery[] clauses = new SpanQuery[words.length];
for (int i = 0; i < words.length; i++) {                
   if (allWordsPrefix || i == words.length - 1)
   {
        PrefixQuery pq = new PrefixQuery(new Term(LOWER_VALUE, words[i])); 
        clausesWildCard[i] = new SpanMultiTermQueryWrapper<PrefixQuery>(  
   }
   else
   {
        Term clause = new Term(LOWER_VALUE, words[i]); 
        clausesWildCard[i] = new SpanTermQuery(clause);
   }                
}
SpanQuery allTheWords = new SpanNearQuery(clausesWildCard, 0, false);

修改 我发现这似乎是一个已知的问题 https://issues.apache.org/jira/browse/LUCENE-5932 https://issues.apache.org/jira/browse/LUCENE-3120

但我不明白这是否已解决或有解决方法。

升级到lucene 5.0.0,但它仍然是hapenning ......

1 个答案:

答案 0 :(得分:0)

在构建索引时是否使用了shingle过滤器?这是我提出的解决方案。简而言之,每个连续的单词对都必须是索引。因此,例如(忽略停止词),“快速的棕色狐狸跳过懒狗”除了每个索引的单词也会有“快速”,“快速棕色”,棕色狐狸“,”狐狸跳“等等。

也许其他人可能有更好的解决方案。