0

私は次のようなものを使用していました:

Field notdirectory = new Field("notdirectory","1", Field.Store.NO, Field.Index.UN_TOKENIZED);

また、「notdirectory:1」などのクエリは常に適切に処理できます。

しかし最近、「Field.Store.NO、Field.Index.UN_TOKENIZED」を変更して、数値以外の文字列にインデックスを付けました。

Field stateField = new Field("state","irn_" + state, Field.Store.NO, Field.Index.UN_TOKENIZED);

「state:irn_CA」のようなクエリは、実際には「irn_CA」が「state」フィールドに追加されていることを Hadoop ログで監視しているにもかかわらず、結果を取得できません。

したがって、「Field.Store.NO、Field.Index.UN_TOKENIZED」を満たすフィールドは疑わしく、数値フィールドのみが検索可能ですが、それに関するドキュメントは見当たりませんでした。

では、その本当の理由とは?

4

2 に答える 2

2

入力クエリの解析に StandardAnalyzer を使用していると思います。これにより、入力クエリ「irn_CA」が「irn」と「CA」の 2 つのトークンにトークン化されます。インデックスには「irn_CA」が 1 つのトークンとして含まれているため、一致しません。

検索中にKeywordAnalyzerを使用してみてください。クエリ文字列に対して単一のトークンを生成し、インデックス付きトークンと正しく一致させます。

于 2009-06-18T05:42:18.477 に答える
0

サーチャービーンはすべてを小文字に強制すると思います...したがって、インデックスに追加するときに状態を小文字にします:

Field stateField = new Field("state","irn_" + state.toLowerCase(), Field.Store.NO, Field.Index.UN_TOKENIZED);

クエリを実行すると、「state:irn_CA」ではなく「state:irn_ca」となります。

また、'irn_' という接頭辞が付いていることにも注意してください。良い呼び出しです。それ以外の場合、ハイライターはクエリにフラグを立てます。

于 2011-05-04T16:07:17.270 に答える