0

SOLR データベースを使用する PHP アプリケーションがあります。/terms リクエスト ( terms doc )を実行しているときに問題が発生しました

したがって、私たちが興味を持っているドキュメントの部分は

poi: "Bistriţa",
...
text: [
"ddt",
"Numeric",
"/14/Gagaga 2/11/Economics/17/datenow",
"/20/Daniel_same/11/Economics/17/datenow",
"0/Gagaga 2",
"1/Gagaga 2/Economics",
"2/Gagaga 2/Economics/datenow",
"0/Daniel_same",
"1/Daniel_same/Economics",
"2/Daniel_same/Economics/datenow",
"ppla",
"seat of a first-order administrative division",
"/19/Daniel_same/1071/Plurinational State of Bolivia/2269/Cuba/2272/Bistriţa",
"0/Daniel_same",
"1/Daniel_same/Plurinational State of Bolivia",
"2/Daniel_same/Plurinational State of Bolivia/Cuba",
"3/Daniel_same/Plurinational State of Bolivia/Cuba/Bistriţa",
"0/Undefined_activity",
"Year",
"0/1999",
"0/1999",
"Measured",
"",
"utf8"
],

そしてリクエストは

http://localhost:8080/solr/terms
?wt=json
&indent=true
&terms.sort=count
&terms.mincount=1
&terms.limit=10
&terms.regex.flag=case_insensitive
&terms.regex=.*bi.*
&terms.fl=text

レスポンスは

{
    responseHeader: {
        status: 0,
        QTime: 4
    },
    terms: {
        text: [
            "bistriå",
            16
        ]
    }
}

結果の問題は、結果のテキストが切り捨てられることです。都市Bistrițaの UTF-8 エンコーディングである "Bistriśa" を期待していました。しかし、結果は特殊文字で切り捨てられているようです。

奇妙なことに、「text」ではなく「poi」というフィールド名でリクエストを行うと、正しい応答が得られます

http://localhost:8080/solr/terms
?wt=json
&indent=true
&terms.sort=count
&terms.mincount=1
&terms.limit=10
&terms.regex.flag=case_insensitive
&terms.regex=.*bi.*
&terms.fl=poi

{
    responseHeader: {
        status: 0,
        QTime: 4
    },
    terms: {
        text: [
            "Bistriţa",
            16
        ]
    }
}

したがって、単語は切り捨てられません。

2 つのフィールドの大きな違いは型です。Poiにはstring型があり、textにはtext_general型があります。text_general 型は、スキーマで次のように定義されています

<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" />
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <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>

質問があれば、詳細を提供できます。今何を追加できるかわからず、質問を膨らませすぎないでください。

4

1 に答える 1

0

特殊文字を適切に処理するために、フィールドでAsciiFoldingFilterFactoryを使用することを検討することをお勧めします。さらに、 Solr が提供する言語分析text_generalサポートも参考にしてください。

于 2013-05-08T17:29:41.397 に答える