2016-07-29 13 views
2

私はFr/EnのWebサイトを持っています。情報は英語またはフランス語で書かれています。 )。モンゴイドのシンプルなモデルを考えてみましょうElasticsearchはフランス語または英語のフィールドのステミングを構成します

class Profile 
    field :job_name 
    field :company_name 
end 

ステミングをサポートするジョブ名をインテリジェントに検索します。私は問題が生じるので設定している

mapping do 
    indexes :job_name, type: :string, fields: { 
    french: { type: :string, analyzer: 'french' }, 
    english: { type: :string, analyzer: 'english' } 
    } 
end 

:だから基本的に私は、私は両方の言語でフィールドを分析し、インデックス部分のために何かを考え出していると信じて、そのフィールド

のフランス語+英語アナライザをしたいです検索。私は実際にはありません。私のデフォルトの検索エンジンごとのフィールド高めるとマルチマッチを使用しています、と私は本当にそれの上にアナライザspcifyする方法を理解していない:「アハト」を検索する際に

query: { 
    filtered: { 
    query: { 
     multi_match: { 
     query: query, 
     fields: [ 
      "company_name^3", 
      "job_name^2", 
     ], 
     type: "best_fields", 
     tie_breaker: 0.3 
     } 
    } 
    } 
} 

理想的には、(フランス語購入)ジョブ名が

  • "gestionnaire D'アハト"( "D '" 接頭辞を参照)を含んでいる場合、エンジンは、結果を返す必要があり
  • "achatsアングロ"(複数を参照してください)。

そしてそれはまた、同様の英語の単語

EDITのために働く必要があります。私のESインデックス(「なし」正常です?)

{ 
    "mydb": { 
    "aliases": {}, 
    "mappings": { 
     "profile": { 
     "properties": { 
      "company_name": { 
      "type": "string" 
      } 
      "job_name": { 
      "type": "string", 
      "index": "no", 
      "fields": { 
       "english": { 
       "type": "string", 
       "analyzer": "english" 
       }, 
       "french": { 
       "type": "string", 
       "analyzer": "french" 
       } 
      } 
      } 
     } 
     }, 
    "settings": { 
     "index": { 
     "creation_date": "1469789941429", 
     "number_of_shards": "5", 
     "number_of_replicas": "1", 
     "uuid": "HHN-rWTTStCXDgQtJMTEPg", 
     "version": { 
      "created": "2030499" 
     } 
     } 
    }, 
    "warmers": {} 
    } 
} 

答えて

1

あなたは、フィールド名にワイルドカードのバージョンを使用することができますmulti_matchは、それぞれのサブフィールドアナライザを使用します。

 "fields": [ 
     "job_name.*^2" 
     ], 
+0

ありがとうございます。残念ながら、それは動作していないようです。私は仕事の名前が「何かのバイヤー」で誰かを作ろうとしましたが、「Profile.search( 'buyer')」は結果を返さなかったのですが、買い手の場合は –

+0

でした。 ES( 'curl'やSense)をRubyクライアントなしで追加することができます。私はちょうど '何かのバイヤー'とテストし、クエリが動作します。たとえば、Elasticsearchのインデックスマッピングが、あなたが思っているものであることを確認してください。あなたの投稿でRubyのコードを提供しましたが、Elasticsearchのレベルではマッピングですか? –

+0

たとえば、 'curl -XGET" http:// localhost:9200/index_name/_mapping "を実行して、インデックスのマッピングを取得します。 –

関連する問題