0

私の Rails アプリケーションでは、solr 検索を使用しています。部分文字列の一致はローカル サーバーでは正常に機能しますが、展開サーバーでは完全な単語と一致しています。

検索可能なブロック

searchable do
  text :firstname, :lastname, :login, :mail
  boolean :member
  integer :status
end

schema.xmlです。

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10" side="front" />
  </analyzer>
</fieldType>

私は何を間違っていますか?

4

1 に答える 1

1

(望ましくない動作の可能性を知らせるために、ここに回答を追加します)

参考までに、 に変更を加えると、アプリケーション内のすべてのインデックス付きテキスト フィールドの構成が変更さ"text" fieldTypeれます。一部のフィールドにはカスタム構成が必要なため、これが望ましくない場合があります。schema.xml

たとえば、(何らかの理由で) 名前を他のテキスト フィールドとは異なる方法で扱いたいとします。名の同義語を追加したいとしましょう。最初に、呼び出し先で新しいfieldTypeを作成しますschema.xmlfirst_name

<fieldtype name="first_name" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
  </analyzer>
</fieldtype>

次にfields、ファイルのセクションに、schema.xml2 つの新しい動的フィールドを追加します。

<dynamicField name="*_first_name"  stored="false" type="first_name" multiValued="false" indexed="true"/>
<dynamicField name="*_first_names" stored="true"  type="first_name" multiValued="false" indexed="true"/>

注: 名前の「s」dynamicFieldは、それが格納された型であることを示します。動的フィールドに * を指定すると、太陽黒点の構成に役立ちます

したがって、searchableブロックで次のことができるようになりました。

searchable do
  text :firstname, :as => :user_first_name
  text :lastname, :login, :mail
  boolean :member
  integer :status
end

これで、カスタム構成"first_name"フィールドが使用されます。

first_name を保存された値にしたい (そしてカスタム構成を使用したい) 場合は、次のように検索可能なブロックを実装します。

searchable do
  text :firstname, :stored => true, :as => :user_first_names
  text :lastname, :login, :mail
  boolean :member
  integer :status
end
于 2013-03-28T20:55:02.763 に答える