我想在Lucene中有一个多重限制查询,它不仅返回符合所有限制的文档(作为第一个结果),还包括仅匹配一部分限制的文档(更糟糕的匹配结尾)结果列表)。
所以说我有来自用户的以下限制:
A:"a" AND B:"b" AND C:"c"
从技术上讲,我可以执行以下查询逐个:
A:"a" AND B:"b" AND C:"c"
A:"a" AND B:"b"
B:"b" AND C:"c"
A:"a" AND C:"c"
A:"a"
B:"b"
C:"c"
然后以编程方式聚合(并根据查询的具体方式,顺序)结果,但这似乎是一种可怕的方法。
那么有什么方法可以告诉Lucene,"请提取符合完整条件的文档,但也请提取仅符合我标准子集的文档" ?
答案 0 :(得分:0)
这正是OR
运算符的用途。它不会随机返回结果文档,而是按分数返回(除非您将另一个值指定为sort
参数)。
所谓的协调因子(或公式中的coord-factor(q,d)
)将惩罚并非所有搜索字段都匹配的文档,例如:如果5个字段中只有4个匹配,则按因子0.8计算。看到
https://lucene.apache.org/core/4_6_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html