1

私のコードは以下の通りです:

SolrQuery query = new SolrQuery();
    query.setQuery(q.trim());
try {
        QueryResponse res = getSolrServer().query(query);
        return res.getResults();
    } catch (SolrServerException sse) {
        log.error(sse);
    }

問題は、3 文字を超えるクエリがある場合に応答が返されることです。たとえば、クエリ文字列「che」は結果を返しますが、クエリ文字列「ch」は応答を返しません。Solr クエリの 3 文字の最小長をオーバーライドする方法はありますか。

以下の xml が問題の原因です。そうであれば、Java を使用してプログラムでオーバーライドできますか

<analyzer type="index">
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="50" />
    <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

事前のヘルプに感謝します。

よろしくお願いいたします。

バイバブ

4

1 に答える 1

3

NGramTokenizerFactory:-
デフォルトの動作。このトークナイザーはフィールド全体で動作することに注意してください。空白でフィールドを壊すことはありません。その結果、スペース文字がエンコーディングに含まれます。

<analyzer>
  <tokenizer class="solr.NGramTokenizerFactory"/>
</analyzer>

で:「やあ男」

Out: "h"、 "e"、 "y"、 ""、 "m"、 "a"、 "n"、 "he"、 "ey"、 "y"、 "m"、 "ma"、 " 」

したがって、構成では:-minGramSize = "3" maxGramSize ="50"3未満のアイテムはフィルタリングされます

2つのアルファベットの単語の場合、インデックスに用語がないため、これらを検索することはできません。それらを検索可能にするには、minGramSizeを2に変更する必要があります。

于 2012-08-23T10:45:32.753 に答える