0

私はフレーズクエリでいくつかの問題に直面しているので、フレーズクエリが実際にスロップのものでどのように機能するかを正確に知るための小さなコードを書いてください:

私は「abcinstituteoftechnology」という文字列を持っており、この文字列のさまざまな組み合わせ(より鉄片のようなもの)に次のようにインデックスを付けました。

Document doc = new Document();
ArrayList<String> sh = new ArrayList<String>(); 
     sh.add("abc institute engineering technology");
     sh.add("abc institute engineering");
     sh.add("abc institute");
     sh.add("abc");
     sh.add("institute engineering technology");
     sh.add("institute engineering");
     sh.add("institute");
     sh.add("engineering technology");
     sh.add("engineering");
     sh.add("technology");
  for(String s : sh){
        doc.add(new Field("insti_shingles", s.toLowerCase(), Field.Store.YES,  Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
  }
  writer.addDocument(doc);

インデックスディレクトリからすべてのトークンを読み取ると、次のトークンのセットがあります。

engineering technology
abc
institute
abc institute engineering technology
technology
abc institute
abc institute engineering
institute engineering technology
engineering
institute engineering

今、私が「abcinstitutetechnology」という用語を検索すると

IndexSearcher searcher = new IndexSearcher(dir);
BooleanQuery booleanQuery = new BooleanQuery();
PhraseQuery query = new PhraseQuery();
query.add(new Term("insti_shingles", "abc institute technology"));
query.setSlop(4);
booleanQuery.add(query, BooleanClause.Occur.SHOULD);
TopDocs hits = searcher.search(booleanQuery, 30);

slopを使用したフレーズクエリのドキュメントによると、いくつかの結果が得られるはずですが、空の結果セットが得られます。しかし、インデックス付きトークンとまったく同じ用語を検索すると、結果が得られます。

フレーズクエリを使用する場合、「abcinstitutetechnology」という用語はトークン「abcinstituteengineeringtechnology」と一致する必要があると思います???

私は何か間違ったことをしていますか?ヘルプ

4

1 に答える 1

0

slop でフレーズ クエリを使用するために特別なトークナイザーは必要ありません。実際、お気づきのように、これらのクエリは失敗します。

を使用してトークン化するだけでStandardAnalyzer、そのカスタムシングルを行う必要はありません。

于 2011-11-28T17:18:34.860 に答える