私はSolrにAudioslave
という名前のインデックスが付けられており、その文書をクエリ文字列Audio Slave
に一致させたいとします。solrクエリの空白を無視する方法
私は次のようなルール設定されている:
<fieldType name="text_filter" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
catenateWords="1"
catenateNumbers="1"
catenateAll="1"
preserveOriginal="1"
generateWordParts="1"
generateNumberParts="1"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
catenateWords="1"
catenateNumbers="1"
catenateAll="1"
preserveOriginal="1"
generateWordParts="1"
generateNumberParts="1"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
そして、それを使用してフィールド:Solrの分析ツールのすべてを使用する場合
<field name="artist_name_filter" type="text_filter" multiValued="false" indexed="true" stored="true" required="false" />
がよさそうです。
クエリ部分は以下の通りです:
- KeywordTokenizerFactoryが
Audio Slave
を生成し、 - その後WordDelimiterFilterFactoryはちょうどここから3列目(
AudioSlave
)を使用することができます(Audio Slave
、Audio
、AudioSlave
とSlave
に分割し - TrimFilterFactoryは、それを
AudioSlave
- として保持します。最後に、LowerC aseFilterFactory一方
audioslave
に変更し、指数部がある:
- KeywordTokenizerFactoryは
Audioslave
を生成し、 - そしてWordDelimiterFilterFactoryとTrimFilterFactory最後に
Audioslave
- LowerCaseFilterFactoryとしてそれを保持それを
audioslave
だから、両方のフィールドが一致する必要がありますが、クエリは結果を返しません:
http://localhost:8983/solr/search_api/select?defType=edismax&fq=type:Artist&q=Audio%20slave&qf=artist_name_filter&wt=json
うん、逃げ去るのはうまくいく。 – dcarneiro