"A"、 "EF" "CDE"などの部分文字列が見つかったすべての結果を取得するには、 "ABCDEF"Solr - 指定された文字列のすべての部分文字列を検索
いくつかの文字が欠落している文字列を検索すると "BDE"のような結果が得られます。この場合、 "C"をスキップすることが許可されているため無効です。
"A"、 "EF" "CDE"などの部分文字列が見つかったすべての結果を取得するには、 "ABCDEF"Solr - 指定された文字列のすべての部分文字列を検索
いくつかの文字が欠落している文字列を検索すると "BDE"のような結果が得られます。この場合、 "C"をスキップすることが許可されているため無効です。
テキストフィールドの分析チェーンでNGramFilter(トークン化ツールではない)を使用することができます。テキストは、サブミットされたテキストの部分文字列ごとに別々のトークンに分割されます。部分文字列の最小/最大の長さを指定して、生成されたトークンの長さを調整することができます。
あなたの入力は、あなたがKeywordTokenizer
を使用し、サブストリング検索するだけで、単一の文字列である場合 - これは、generate the substrings with the NgramFilterに使用される単一のトークンとして、あなたの入力文字列を保持しますが:
<filter class="solr.NGramFilterFactory"/>
デフォルト最小/最大の値が(例から)与える、1と2である:
In: "four score"
Tokenizer to Filter: "four", "score"
Out: "f", "o", "u", "r", "fo", "ou", "ur", "s", "c", "o", "r", "e", "sc", "co", "or", "re"
あなたの代わりに「4得点」を持っていると思いますので、あなたのケースでは、文字列全体が、単一の値として保持されますトークンを分離する。
wikiの例の値の1/4に与えられた例は現在間違っています(EdgeNGramFilterからコピーされたようです)ので、無視してください。
コンテンツをクエリする方法に応じて、最小値/最大値を微調整する必要があります。長さが3未満の部分文字列を問い合わせることがない場合は、最小値として3を使用します。
ありがとうございました。説明はとても役に立ちます:) – Pie222
私はあなたのユースケースのための具体的な分析・チェーンを使用することをお勧めします:
<fieldType name="text_ngram" class="solr.TextField">
<analyzer type="index">
...
<filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="4"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" />
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1" catenateWords="0"
catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
N.B.クエリ時に予期しない動作をしたくない場合は、Ngramトークンフィルタリングを実行しないでください。
[1] https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions#FilterDescriptions-N-GramFilter
どのクエリを試しましたか? – Mysterion
NGramFilterを使ってみましたか? – MatsLindh
あなたの質問は非常に不明です。あなたが索引をつけて見つけようとしているテキスト(ABCDEF)は何ですか?あなたが検索している検索文字列は何ですか(A、EFなど)? –