0

都市の名前と属する国の名前に基づいて、都市を検索するためのテキスト検索を提供しようとしています。

たとえばMilan, Italy、 という用語mil itaで検索したり、 で検索したりしたいとLos Angeles, United Stateslos ang uniます。

これらは私が持っている現在のモデルです(検証は省略されています):

class City < ActiveRecord::Base
  belongs_to :country

  searchable do
    text :name
    text :country do
      country.name
    end
  end
end

class Country < ActiveRecord::Base
end

これは私のsolrschema.xmlファイルの関連部分です:

<fieldtype class="solr.TextField" positionIncrementGap="100" name="text">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <!--<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>-->
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.EdgeNGramFilterFactory"
            minGramSize="3"
            maxGramSize="30"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <!--<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>-->
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
  </analyzer>
</fieldtype>

私はコントローラで検索を実行しています:

search = City.search do
  fulltext params[:q]
  paginate page: 1, per_page: 10
end

ここで何が起こるかというと、検索すると結果milが得られますが、検索しても何も返されません。Milan, Italymil ita

何か案は?

前もって感謝します、

r.

4

1 に答える 1

0

解決策を見つけたので、共有したいと思いました。

必要なのは、次のように、検索を有効にしたいすべてのテキストを含む「カスタム フィールド」を作成することです (City モデル)。

searchable do
  text :composite_name do
    "#{name} #{country.name}"
  end
end

これは機能します。

r.

于 2013-02-15T14:03:39.807 に答える