2012-12-30 72 views
4

我試圖用elasticsearch搜索一個特定的短語,即「foo bar」。我查詢類似下面的一個:elasticsearch雙引號不起作用

curl -X GET "http://localhost:9200/objects/object/_search" -d '{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "query_string": { 
      "query": "\"foo bar\"", 
      "default_field": "_all" 
      } 
     } 
     ] 
    } 
    } 
}' 

我在我的指數有兩個對象,尋找與此類似:

{ 
    sub_sections: [ 
    { 
     name: "foo" 
    }, 
    { 
     name: "bar" 
    } 
    ] 
} 

{ 
    sub_sections: [ 
    { 
     name: "foo bar" 
    } 
    ] 
} 

我期待只有最後一個匹配該短語的對象纔會在查詢中使用雙引號時返回。但是,這兩個對象總是返回。我已經嘗試過auto_generate_phrase_queries ++之類的選項,目前爲止沒有運氣。

這是預期的行爲?我怎樣才能返回具有完全詞組匹配的文檔?

回答

3

默認情況下,兩個示例的索引方式完全相同。當相同字段的多個實例被索引時,它們按順序編制索引,而在一個字段的最後一項和下一個字段的第一項之間沒有間隔。這就是詞組搜索跨域實例的原因。您可以通過將mapping中的position_offset_gap設置爲非零值來增加字段之間的差距。快速演示請參閱https://gist.github.com/4420794

+0

謝謝!這解釋了它:) –

+0

嗯..應該這與_all字段以及? –

+0

_all字段此刻不支持它。請參閱https://groups.google.com/d/topic/elasticsearch/FdEfD3K8SUs/discussion – imotov