【发布时间】:2012-02-29 12:23:29
【问题描述】:
如果可能,我会奖励 +100 这个问题,即使它已经被回答和接受了
我正在使用 Lucene 3.2,这是我的索引和代码中的内容:
- 每个索引文档超过 10 个字段。
-
OR查询短语中的操作数(即:“my lucene search”变为“my OR lucene OR search”)。 -
MultiFieldQueryParser和Occur.SHOULD在所有字段中。 - 一个包含所有其他字段的特定 default 字段(如本解决方案 How to do a Multi field - Phrase search in Lucene? 中所建议的那样)。
我想达到什么目的?一种类似谷歌的搜索,让我解释一下:
- 搜索所有字段
- 评分结果(特定领域的提升等)
- 向查询短语添加单词应该过滤结果
除了最后一个,我正在触及各个方面。我的问题如下:
- 如果我只在包含所有其他字段的 默认 字段中进行搜索,我不会得到高分的结果
- 仅使用 AND 操作数进行搜索,我得到的结果过于过滤,只得到在一个字段中具有 整个 查询短语的结果。
- 仅使用 OR 操作数进行搜索非常适合查询中的一个单词,但是当向查询短语添加更多单词时,结果会显着增加,而不是过滤(就像 Google 所做的那样)。
- 我不知道如何从另一个查询中筛选出一个查询
这是我对查询解析器的实际调用:
MultiFieldQueryParser.parse(
Version.LUCENE_31,
OrQueryWords, //query words separated with OR operand
searchFields, //String[] searchFields; // all fields
occurs, //Occur[] occurs; {Occur.SHOULD, Occur.SHOULD, etc..}
getFullTextSession().getSearchFactory().getAnalyzer(Product.class)
);
此查询的toString() 打印如下内容:
(field1:"word1 word2" (field1:word1 field1:word2)) (field2:"word1 word2" (...)) etc.
现在我正在尝试添加 default 字段(包含所有其他字段的字段),其中查询词用 AND 操作数和 Occur.MUST 分隔:
MultiFieldQueryParser.parse(
Version.LUCENE_31,
AndQueryWords, //query words separated with AND operand
new String[] {"defaultField"},
new Occur[] {Occur.MUST},
getFullTextSession().getSearchFactory().getAnalyzer(Product.class)
);
这个查询的toString() 打印出这个:
+(default:"word1 word2" (+default:word1 +default:word2))
如何交叉两个查询?有没有其他解决方案可以实现?
【问题讨论】: