2016-07-29 32 views
2

我有一個Fr/En網站,我有一個「個人資料」模型,信息可以用英文或法文寫成(我不知道哪一個)。考慮Mongoid上的簡單模型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最重要的是分析儀:對「ACHAT」搜索時

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

理想的情況下,(法國購買) ,發動機應返回結果在作業名稱中包含

  • 「gestionnaire D'ACHAT」(見 「d」「 前綴),
  • 」ACHATS EN格羅斯「(見覆數)。

而且它也應該適用於類似英語單詞

編輯:我的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('買家')'沒有返回任何結果......雖然它與'買家'做了 –

+0

我的建議是測試這與純沒有你的Ruby客戶端的ES('curl'或Sense),因爲這是一個額外的變量。我剛剛與'買東西'的測試和查詢工作。例如,你確定Elasticsearch的索引映射是你認爲的嗎?在你的文章中,你爲它提供了Ruby代碼,但是在Elasticsearch級別上是映射嗎? –

+0

例如,運行'curl -XGET「http:// localhost:9200/index_name/_mapping」'來獲取索引的映射。 –

相關問題