3

Sunspotが標準モードで全文検索で単語または文字のシーケンスを検索するかどうか、およびシーケンスを検索する方法を理解したかったのです。

たとえば、次の設定があります。

class User < ActiveRecord::Base
   searchable do
      text :email
   end
end

Userメール「panayotis@matsinopoulos.gr」で

次のクエリ:

search = User.search do 
   fulltext 'matsinopoulos'
end

結果は得られませんが、次のようになります。

search = User.search do
   fulltext 'panayotis@matsinopoulos.gr'
end

もたらす。

単語ではなく文字のシーケンスに一致する黒点の構成設定はありますか?

または、私は何か間違ったことをしていますか?

4

1 に答える 1

8

ファイルを構成する必要があります。

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>

に向ける必要があります:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory"
            minGramSize="3"
            maxGramSize="30"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>`
</fieldType>

Solr構成に関する非常に優れたリファレンスは、次の場所にあります。

http://techbot.me/2011/01/full-text-search-in-in-rails-with-sunspot-and-solr/

ただし、この参照に一致する部分的な単語に関してEdgeNGramFilterFactoryは、単語の先頭のみにインデックスを付けるものについて説明していることに注意してください。Solrを単語の任意の部分に一致させるには、NGramFilterFactoryを使用する必要があります。

とに設定minGramSizeしていることにも注意してください。したがって、長さが3未満または30を超えるパターンは、クエリで返されません。3maxGramSize30

于 2012-08-27T11:01:02.140 に答える