ワードセパレーターの問題
(The bot translated the original post https://lists.apache.org/thread/9jypc5vhvyyxd3k6rw6xynvxmd2pt68k into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)
こんにちは、
私は、設定された「単語区切り記号」に問題があるのではないかと思います。
例えば、次のようなケースがあります。
- 検索で「640」を入力した場合、640、640-0 の3つの項目が見つかることを期待しています。
- 「640-01」で検索した場合、2つの項目が見つかることを期待しています。
#1artikelnummer_txt:"640*"
AND lng:"de"
結果:
"docs":[
{
"artikelnummer_txt":"640-01"
},
{
"artikelnummer_txt":"640-02"
},
{
"artikelnummer_txt":"640-01LFM"
}
]
これは完璧です。「artikelnummer_txt」フィールドの中で640から始まるすべての項目が見つかりました。
#2artikelnummer_txt:"640-0*"
AND lng:"de"
結果:
"docs":[ ]
ただし、"-0"を含めて検索すると、記事が見つかりません。ここでは3つの項目が見つかることを期待しています。
#3artikelnummer_txt:"640-01*"
AND lng:"de"
結果:
"docs":[
{
"artikelnummer_txt":"640-01"
}
]
ここでは1つの項目しか見つかりませんが、2つの項目が見つかることを期待しています。
schema.xml の設定:
<dynamicField name="*_txt" type="text_general" indexed="true" stored="true"/>
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="false">
<analyzer type="index">
<tokenizer name="standard"/>
<filter ignoreCase="true" words="stopwords.txt" name="stop"/>
<filter name="lowercase"/>
</analyzer>
<analyzer type="query">
<tokenizer name="standard"/>
<!-- テスト START -->
<filter name="wordDelimiterGraph" types="wordDelimiters.txt"/>
<filter name="flattenGraph"/>
<!-- テスト END -->
<filter ignoreCase="true" words="stopwords.txt" name="stop"/>
<filter ignoreCase="true" synonyms="synonyms.txt" name="synonymGraph" expand="true"/>
<filter name="lowercase"/>
</analyzer>
</fieldType>
wordDelimiters.txt:
# 数字の前で '$'、'.'、',' で分割しないようにする
$ => DIGIT
. => DIGIT
- => ALPHANUM
この設定では、「-0」を含む検索がうまく機能していないようです。もしかすると「-」の扱いが原因かもしれません。wordDelimiterGraph
フィルタがどのように動作しているかを確認し、-
をどのように処理するかを再検討する必要があるかもしれません。
何か参考になるアイデアがあれば教えてください。
よろしくお願いします。
Carsten
トピックへ返信するには、ログインが必要です。