F.e.私は3つの文書を持っています。
1.「犬猫ボール」
2.「犬ボールの猫」
3.「犬猫、ボールと象」Solr:より大きなフレーズを除く検索
Soが「犬AND猫ANDボール」を照会することで、最初の2つの文書のみを受け取りたい。
だから。私が要求した単語だけを結果に含めるという主なアイデアです。
アドバイスをいただければ幸いです。
ありがとうございます。
F.e.私は3つの文書を持っています。
1.「犬猫ボール」
2.「犬ボールの猫」
3.「犬猫、ボールと象」Solr:より大きなフレーズを除く検索
Soが「犬AND猫ANDボール」を照会することで、最初の2つの文書のみを受け取りたい。
だから。私が要求した単語だけを結果に含めるという主なアイデアです。
アドバイスをいただければ幸いです。
ありがとうございます。
を作成しているときに、Document
をインデックスに追加する前に、TermVector.YES
を使用している場合は、コレクタをオーバーライドしてTermVectorを保存することもできます。ここでは、単純な(スコアなしで文書だけを返す)実装です:あなたはそれを受け入れられるのであれば、文書にする必要がありますどのように多くの用語を知っている:今
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)
を使用あなたはそれを確認し、このルールに合致する文書だけを収集するだけです。もちろん、これはもっと複雑になることがあります(ベクトルの特定の用語を探す、ベクトルの単語の順番)が、これは一般的な考えです。
実際にTermVectorを保存すると、ほとんど何でもできるので、それを使ってみてください。
ハッシング機能を備えたフィルタファクトリ/トークナイザのペアを実装できます。あなたは
somestring:"dog AND cat AND ball" AND somehash:"dog AND cat AND ball"
2番目の検索クエリ部分はクエリ処理で暗黙的にハッシュされます。
これは
P.S.(偽陽性の非常に非常に非現実的な確率で)完全一致のみになりますあなたはtermvectorsを格納する必要はありません。目立つ小さな指数になるでしょう。
あなたの問題は何ですか?なぜ "犬と猫とボール"はあなたのために働かないのですか? – Xodarap
私は、犬、猫、そしてボールよりも洗練された書類は必要ありません。そう。私は検索結果に3番目のケースは必要ありません。 – denys
あなたは '+ dog + cat + ball -elephant'を行うことができます。 (または "... AND(象はない)")しかし、あなたが望んでいない単語はすべて明示的に除外しなければなりません。 – Xodarap