gpt4 book ai didi

java - Solr:搜索排除更大的短语

转载 作者:行者123 更新时间:2023-12-02 08:15:49 25 4
gpt4 key购买 nike

F.e.我有 3 个文件。
1.《狗猫一个球》
2.“球猫狗”
3.“狗、猫、球和大象”

所以。通过查询“dog AND cat AND ball”,我只想收到前两个文档。
所以。我只想将我要求的单词包含在结果中的主要思想。

我将不胜感激任何建议。
谢谢。

最佳答案

好吧,如果您存储 TermVector(在创建 Field 时,在将 Document 添加到索引之前,请使用 TermVector.YES)这可以通过覆盖收集器来完成。这是一个简单的实现(仅返回没有分数的文档):

private static class MyCollector extends Collector {
private IndexReader ir;
private int numberOfTerms;
private Set<Integer> set = new HashSet<Integer>();

public MyCollector(IndexReader ir,int numberOfTerms) {
this.ir = ir;
this.numberOfTerms = numberOfTerms;

}

@Override
public void setScorer(Scorer scorer) throws IOException { } //we do not use a scorer in this example

@Override
public void setNextReader(IndexReader reader, int docBase) {
//ignore
}

@Override
public void collect(int doc) throws IOException {
TermFreqVector vector = ir.getTermFreqVector(doc, CONTENT_FIELD);
//CONTENT_FILED is the name of the field you are searching in...
if (vector != null) {
if (vector.getTerms().length == numberOfTerms) {
set.add(doc);
}
} else {
set.add(doc); //well, assume it doesn't happen, because you stored your TermVectors.
}

}

@Override
public boolean acceptsDocsOutOfOrder() {
return true;
}
public Set<Integer> getSet() {
return set;
}
};

现在,使用IndexSearcher#search(Query,Collector)

这个想法是:你知道文档中应该有多少个术语才能被接受,所以你只需验证它,并只收集符合此规则的文档。当然这可能更复杂(在 vector 中查找特定术语, vector 中的单词顺序),但这是一般想法。

实际上,如果您存储了 TermVector,您几乎可以做任何事情,所以只需尝试使用它即可。

关于java - Solr:搜索排除更大的短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6467949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com