SOLR 検索エンジンを使用しています。
数日前、特定の列に対して同様の操作を実行するための要件を思いつきました。
例えば:
Column name: Name
Content: Stackoverflow is good.
クエリは
Name:("*overflow is*")
このクエリは、具体的な 「Stackoverflow が優れている」ことを示しているはずです。結果として
この入力パラメーターは、入力全体と見なす必要があります。これは、フリー テキスト検索と見なされるべきではありません。SQL では「like」操作として機能するはずです。
そのため、この構成を使用しています。
<fieldtype class="solr.TextField" name="string_wildcards" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.KeywordTokenizerFactory"/>
</analyzer>
</fieldtype>
このクエリは、「like」操作から期待どおりの結果を返してくれません。
例: 名前:("オーバーフローは")
'LIKE' 演算子ではなく、FREE TEXT として検索します。
それは私に結果を与える
- オーバーフローとは。
- 私の名前はABCです
- オーバーフローとは
- スタックオーバーフローは良いです。
私の予想される結果はポイント 4 のみです。上記の構成では 4 つの結果すべてが得られますが、これは間違っています。
私の要件に合った正しい構成を教えてください。