5

こんにちは私はアプリで通常のRailsActiveRecord LIKE検索を使用してきましたが、sunspotsolrsearchを使用し始めました。できるだけレールのように検索に近づけて動作させたいと思います。


wine.rb

#sunspot stuff
  searchable :auto_index => true, :auto_remove => true do
  text :name
end
#sunspot stuff


solr / conf / schema.xml

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>


application_controller.rb

search_string = "will input some values here"
query = "%" + search_string + "%"

solr_search = Wine.search do
  fulltext search_string
end
@solr_search_results = solr_search.results.sort_by{|e| e[:id]}

@rails_search_results = Wine.find(:all, :conditions => ['wines.name LIKE ?' , query]).sort_by{|e| e[:id]}


search1
search_string = "grand"

@solr_search_results186
グランドリザーブ
688グランドプレジールカベルネソーヴィニョンシラーズマルベックプチヴェルドットカベルネフラン
760グランドビンブラン
768グランドルージュ
857プレミアグランクリュ
1067グランドクラシック
1584グランドビンデグレネリー
3389グランドコンスタンスマスカット
3708グランドキュヴェブリュット 3857
グランドコンスタンスマスカット

@rails_search_result
グランドリザーブ
688グランドプレジールカベルネソーヴィニョンシラーズマルベックプチヴェルドーカベルネフラン
760グランヴィンブラン
768グランルージュ
857プレミアグランクリュ
969リバーグランデュールケープブレンド
972リバーグランデュールカベルネソーヴィニョン
973リバーグランデュールシャルドネ
974 River Grandeur Chenin Blanc
975 River Grandeur Pinotage
976 River Grandeur Sauvignon Blanc
977 River Grandeur Shiraz
978 River Grandeur Rose
1067 Grand Classique
1584 Grand Vin De Glenelly 3389
GrandConstanceMuscat3708GrandCuvèeBrut3857GrandConstanceMuscatSolr
が エントリを見つけられなかったようです「Grandeur」が含まれていると、完全に一致するものだけが見つかりましたか?どうすればこれを修正できますか?



search2
search_string = "rood"

@solr_search_results
200 Dassies Rood Cinsaut Cabernet Sauvignon Ruby Cabernet 3198
Dassies Rood Cinsaut Cabernet Sauvignon Ruby Cabernet
3394 Rood

@rails_search_results
200 Dassies Rood Cinsaut Cabernet Chauvignon Ruby Cabernet 483 Roodeberg
Red Cabernet
Sauvign Dassies Rood Cinsaut Cabernet Sauvignon Ruby Cabernet 3394 Rood 3477 Roodeberg Red 3478 Roodeberg White 3594 Roodeberg White 360​​4 Roodeberg Red 同じことが起こります。search_string='rood'の場合、solrは'Roodeberg'を見つけられませんでした。完全に一致するものだけが見つかりました。










アップデート

DanSのおかげで、部分一致のためにschema.xmlにnGramフィルターが追加されましたが
、それでもすべての結果が表示されるわけではありません

app / solr / conf / schema.xml

<fieldType name="text" class="solr.TextField" omitNorms="false">

    <analyzer type="index">
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
        <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15"/>
    </analyzer>

    <analyzer type="query">
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
    </analyzer>

</fieldType>



それでも、私が望んでいることを完全には実行しません。次の例を見てください

。search3
search_string = "merl"

@solr_search_results
130 Merlot
202 Merlot
306 Merlot
336 Merlot
556 Merlot
579 Merlot
592 Merlot
623 Merlot
640 Merlot
689 Merlot
694 Merlot
714 Merlot
776 Merlot
790 Merlot
841 Merlot
865 Merlot
891 Merlot
947 Merlot
1015 Merlot
1045 Merlot
1046 Merlot
1073 Merlot
1075 1096メルロー 1111メルロー 1121メルロー 1144メルロー 1145メルロー 1169メルロー@rails_search_results









34キャバリエリザーブブレンドメルローカベルネフランカベルネソーヴィニョンシラーズ
129マットブラックカベルネソーヴィニョンシラーズメルロープチヴェルドットムルヴェードルピノタージュ
130メルロー
202メルロー
240グラッパカベルネメルロープレミアム
306メルロー
336メルロー
416ドライロゼメルロー
477オーケストラカベルネソーヴィニョンマルベックメルローキャブ
フランシCabernet Sauvignon Shiraz Merlot
556 Merlot
579 Merlot
592 Merlot
614 Cabernet Merlot
623 Merlot
640 Merlot
656 Calligraphy Merlot Cabernet Franc Sauvignon Blanc
672 Ondine Merlot
689 Merlot
694 Merlot
696 Barrel Select Merlot
714 Merlot
762プライベートコレクションメルロー
776メルロー
790メルロー
795プライベートコレクションメルロー
816JJハンドメイドワインメルロー
832ゴールデントライアングルメルロー
841メルロー
842メルローロゼ
854イーグルクレストカベルネソーヴィニョンメルロー
865メルロー
877ワインメーカーズチョイスメルローシラーズ
891メルロー
892メルローリザーブ
893マウンテンレッドシラーズメルロー
941セラーセレクションメルローカベルネソーヴィニョン
943ヴィンヤードセレクションカベルネソーヴィニョンメルローキャブフランシラーズ
947メルロー
982ボエエラスムスカベルネソーヴィニョンメルローマルベックプチヴェルドー
983カラカベルネソーヴィニョンシラーズメルロー
984クラシックカベルネソーヴィニョンシラーズメルロー
1010 Laureat Cabernet Sauvignon Merlot 1015 Merlot
1045 Merlot
1046
Merlot
1073 Merlot
1075 Merlot
1079 Cabernet / Merlot
1089 Merlot
1093 Adelberg Cabernet Sauvignon Merlot
1096 Merlot
1104 Z Collection Cabernet Franc Merlot Cabernet Sauvignon
1111 Merlot
1121 Merlot
1144 Merlot
1145 Sauvignon Merlot 1260 Cabernet Sauvignon / Merlot 1261 Merlot 1269 Merlot 1326 Merlot 1349 Cabernet Sauvignon Merlot 1364 Cultivar Selection Merlot 1381 Merlot 1384 Cabernet Sauvignon Merlot











1393 Cabernet Sauvignon Merlot
1401 Cabernet Sauvignon Merlot
1404 Merlot
1421 Petit Cabernet Sauvignon Merlot
1424 Merlot
1431 Collection Merlot
1443 Merlot
1454 Merlot
1467 Poker Hill Shiraz Merlot
1468 Merlot
1476 Merlot
1491 Circumstance Merlot 1495
Peacock Ridge Merlot
1542 Merlot
1543フィルタリングされていないメルロー 1592メルロー 3001メルロー 3007カベルネットソービニョンメルロー 3036カベルネットソービニョンメルロー 3056メルロー 3067コッシャーメルロー 3073オーガニックメルロー 3079プレミアムメルロー











3091メルロー
3106メルローとマルベック
3133カベルネットソービニョンメルロー31435
つの気候メルロー
3154リザーブNo1メルロー
3182ラノイカベルネットソービニョンメルロー
3183リザーブコレクションキャブソーヴメルローキャブフラン
3200メルロー
3236ジョルジオカベルネソーヴィニョンメルロープチヴェルドーシラーズ
3258ダニエデウェットキャブMerlot
3276 Red Cabernet Sauvignon Merlot Cab Franc Petit Verdot Shiraz
3288 Merlot
3303 Quartet Pinotage Cabernet Sauvignon Merlot Shiraz
3307 Diversity Merlot Malbec
3311 Vineyard Creations Merlot
3318 Caapmans Cabernet Sauvignon Merlot
3321 Luipaardsberg Merlot
3322 Merlot
3326 Rhinofields Merlot
3334 Merlot
3343 Merlot
3363 Merlot Cabernet Sauvignon
3372 Merlot
3390 Merlot
3416 R 62 Merlot Cabernet Sauvignon3418Unplugged62MerlotRosé3419Unplugged62Merlot Shiraz 3431 Merlot 3439 KC Cabernet Sauvignon Merlot 3471 Orchestra Cabernet
Sauvign Merlot Cabernet Sauvignon 3510 Merlot 3531 Merlot 3540 Merlot 3560 Merlot 3568 Merlot Rose 3578 Special Edition Merlot 3581 Merlot 3584 Cabernet Sauvignon Merlot 3624 Merlot 3642 Cellar Selecti on Merlot
















3657 Merlot
3677 Merlot
3681 Merlot
3685 Series C Cabernet Sauvignon Merlot Cab Franc
3693 Merlot
3728 Alexanderfontein Merlot
3755 Peacock Ridge Merlot
3771 The Old Museum Merlot
3773 Cellar Selection Cabernet Sauvignon Merlot
3820 Merlot
3859 Merlot
3882 Dunstone Merlot 3900
Duckitt Merlot Cabernet Sauv


4

2 に答える 2

3

Update2

修理済み!Solrはデフォルトで30エントリしか表示しないようです。そのため、最も関連性の高い一致のみが表示され、私も必要な他のエントリはスキップされました。
このファイルを追加しました

myapp / config / initializers / sunspot_solr.rb

Sunspot.config.pagination.default_per_page = 3000
于 2012-05-21T11:52:51.893 に答える
3

部分文字列を一致させたいようです。

次のフィルターをschema.xmlに追加して、インデックス付きテキストのプレフィックスと一致させます。

<filter class="solr.EdgeNGramFilterFactory"/>

または、任意の部分文字列に一致させるには、次のようにします。

<filter class="solr.NGramFilterFactory"/>

詳細については、Solrwikiを参照してください。

于 2012-05-15T13:39:23.277 に答える