2012-05-30 61 views
2

特定字段我有一個具有以下字段的資源對象:標題描述,和設置Elasticsearch分析器使用輪胎寶石

使用輪胎寶石,我想用一個標準的分析儀標題描述,但對於領域我想用雪球分析儀。

所以在我 resource.rb文件我有以下代碼:

mapping do 
    indexes :title, type: 'string', :index => :not_analyzed, :store => true 
    indexes :description, type: 'string' 
    indexes :body, type: 'string', :analyzer => 'snowball' 
end 

def self.search(params) 
    search_query = params[:query] 

    tire.search(page: params[:page], per_page: 15) do |s| 
    s.query { string params[:query], default_operator: "AND"} if params[:query].present? 
    # do i need another line here specifically for description? 
    #s.query { string "body:#{params[:query]}", analyzer: 'snowball'} if params[:query].present? 
    end 
end 

我設定的分析儀中的映射越滾越大。我確認這個工程,因爲如果我運行下面的命令:

curl -XGET localhost:9200/example/_search?q=body:cook 

它將返回烹調,烹調等

不過,我希望能夠通過下面的查詢

curl -XGET localhost:9200/example/_search?q=cooking 

而我想elasticsearch搜索這個詞標題描述字段和搜索字廚師身上

這可能嗎?而且因爲我對整個搜索遊戲不熟悉,這是個好主意嗎?還是我只是在火坑上玩弄罐裝汽油的人?

回答

6

當您在查詢中未指定字段時,將搜索_all字段。 _all字段包含所有字段的副本,它使用默認分析器。可以將默認分析儀更改爲雪球,因爲它在How do I set the default analyzer for elastic search with tire?中進行了說明。還可以控制哪些字段包含在_all字段中。

+0

謝謝imotov,我看到那篇文章。如果我使用該帖子作爲參考,我假設如果我將雪球設置爲默認分析器,它也將應用於標題和說明字段。我想我想要的是你提到的第二個選項,即控制哪些字段包含在_all字段中,但是如果我使用這個選項,我還可以定義通過雪球分析器包含其他字段嗎?您是否還有任何在線樣本,您知道在同一個查詢中使用了兩臺分析儀?再次感謝。 – schmudu

+1

我看到,如果你想在不同的領域使用不​​同的分析儀,_all字段不適合你。 _all字段基本上是幾個字段的副本,它只能使用一個分析器。如果你想要不同的分析器,你應該爲每個字段使用單獨的查詢,然後使用[Bool Query](http://www.elasticsearch.org/guide/reference/query-dsl/bool-query.html)或[Dis Max Query](http://www.elasticsearch.org/guide/reference/query-dsl/dis-max-query.html)。 – imotov

+0

真棒..感謝提示imotov!我會試試看。 – schmudu

相關問題