Solrを使用して製品を検索するオンラインストアがあります。基本的なセットアップは問題なく動作しますが、現在、いくつかの機能が不足しています。Amazon などのオンライン ショップを調べたところ、提供されている機能が気に入りました。そこで私は、Solr を構成して一部の機能をエンド ユーザーに提供するにはどうすればよいかを考えました。
私たちの製品データは、次のような製品の標準データで構成されています
- 商品のタイトル
- 説明
- 商品が複数のカテゴリとサブカテゴリに属している
- 製品には、赤、青、緑、S、M、L、XL の T シャツや、16 GB、32 GB の iPad など、複数のバリエーションがあり、オプションがあります。
- 商品にはブランドがある
- 製品には小売業者がいます
今のところ、このスキーマ ファイルを使用して、Solr でインデックスを作成し、クエリを実行しています。
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.WordDelimiterFilterFactory" catenateWords="1" catenateAll="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.WordDelimiterFilterFactory" catenateWords="1" catenateAll="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="true"/>
</analyzer>
</fieldType>
EdgeNGramFilterFactory
のような単語shirt
をsh
,shi
,shir
,に索引付けしますshirt
WordDelimiterFilterFactory
のような単語wi-fi
をwi
,fi
, に分割しますwifi
PorterStemFilterFactory
ステミングに適していますPhoneticFilterFactory
ちょっとあいまい検索を提供します
1 つの問題は、あいまい検索がうまく機能しないことです。その本を検索してInferno
スペルを間違えるとInfenro
、検索結果が返されません。SpellCheckComponent
( http://wiki.apache.org/solr/SpellCheckComponent )について読んだことがありますが、それがあいまい検索を行う最良の方法なのか、それとも 特徴。
2 番目の問題は、Shirts red
赤い T シャツ (赤はオプション タイプの色のオプション値) を検索するか、 または を検索するwoman shoes
ことが可能であるということadidas shoes woman
です。Solrでこれを行うことは可能ですか?
schema.xml
そして 3 つ目の問題は、そのような機能を実現するために、内部のトークナイザーとフィルターのどれが適切な選択なのか、私にはわからないということです。
誰かがsolrでそのような機能を使用したことがあり、この場合に私を助けてくれることを願っています. どうも!
編集
以下は、Solr 内に保存するデータの一部です。
<doc>
<str name="id">572</str>
<arr name="taxons">
<str>cat1</str>
<str>cat1/cat2</str>
<str>cat1/cat2/cat3</str>
<str>cat1/cat4</str>
</arr>
<arr name="options">
<str>color_blue</str>
<str>color_red</str>
<str>size_39</str>
<str>size_40</str>
</arr>
<int name="count_on_hand">321</int>
<arr name="name_text">
<str>Riddle-Shirt Tech</str>
</arr>
<arr name="description_text">
<str>The Riddle Shirt Tech Men's Hoodie features signature details, along with ultra-lightweight fleece for optimum warmth.</str>
</arr>
<arr name="brand_text">
<str>Riddle</str>
</arr>
<arr name="retailer_text">
<str>Supershop</str>
</arr>
</doc>
キーと値のペアが適切な方法で保存されているかどうかはわかりませんoptions
が、それが最初に思いついた方法です。