2

PHP用のSolariumクライアントライブラリでApache Solrを使用しています。

問題は特殊文字、ダッシュ ( -) です。

検索クエリにダッシュがあると、一致するものがありません。

を使って解決してみましたSolarium_Query_Helper::escapeTerm()。しかし、再び一致するものはありません。ダッシュはバックスラッシュでエスケープされています\

この問題の解決策は何ですか?

インデックス作成時にすべてのフィールドをエスケープすることを考えていましたが、それは良い考えではないようです。

これが私の一部ですschema.xml

 <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
...
<fields>
...
  <field name="myfield" type="text_general" indexed="true" stored="true" />
</fields>
...
<defaultSearchField>text</defaultSearchField>
<copyField source="myfield" dest="text" />
4

1 に答える 1

4

エスケープする必要があるいくつかの特殊文字です。それらはここにリストされています:

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \

バックスラッシュを使用してそれらをエスケープできます\。私はソラリウムの専門家ではありませんが、あなたが使用している機能は必要なことをしているようです。おそらく、期待される一致が返されない別の理由があります。

于 2012-10-22T10:27:00.383 に答える