0

我使用耐嚼gem elasticsearch。導軌:使用彈性搜索數據地址使用elasticsearch耐嚼寶石

我有LocationsIndex,映射:

class LocationsIndex < Chewy::Index 
    settings analysis: { 
    analyzer: { 
     folding: { 
      tokenizer: "standard", 
      filter: [ "lowercase", "asciifolding" ] 
     }, 
     sorted: { 
     tokenizer: 'keyword', 
     filter: ['lowercase', 'asciifolding'] 
     } 
    } 
    } 

    define_type Location do 
    field :name, type: 'string', analyzer: 'standard' do 
     field :folded, type: 'string', analyzer: "folding" 
    end 
    field :address, type: 'string', analyzer: 'standard' do 
     field :address, type: 'string', analyzer: 'folding' 
    end 
    field :locations, type: 'geo_point', value: ->{ {lat: lat, lon: lon} } 
    end 

end 

當我查詢:

LocationsIndex::Location.query(
     multi_match: { 
      query: keyword, 
      fields: ["address", "address.folded" ,"name", "name.folded"] 
     } 
    ) 

數據樣本:

{ 「花」:2 「TIMED_OUT」:假, 「_shards」:{ 「total」:5, 「successful」:5, 「failed」:0},「hits」:{ 「總」:10, 「MAX_SCORE」:1.0, 「命中」:[{ 「_index」: 「位置」, 「_type」: 「位置」, 「_id」: 「131」, 「 _score「:1.0, 」_source「:{」name「:」ViệtNam「,」address「:」ViệtNam「,」locations「:{」lat「:16.9054,」lon「:106.576}} }, {_ name:「locations」, 「_type」:「location」, 「_id」:「136」, 「_score」:1.0, 「_source」:{「name」:「Quan truong Ngo Mon 「,」address「:」23/8,ThừaThiênHuế,ViệtNam「,」locations「:{」lat「:16.4669,」lon「:107.58}},{ 」_index「:」locations「, 「_type」:「location」, 「_id」:「132」, 「_score」:1.0, 「_source」:{「name」:「ThừaThiênHuế」,「address」:「ThừaThiênHuế, 「位置」:{「lat」:16.4674,「lon」:107.591}} },{ 「_index」:「locations」, 「_type」:「location」, 「_id」:「 137「, 」_score「:1.0, 」_source「:{」name「:」Phu Van Lau「,」address「:」23/8,ThừaThiênHuế,ViệtNam「,」locations「:{」lat 「:16.4655」 LON「:107.581}} },{ 」_index「: 」位置「, 」_type「: 」位置「, 」_id「: 」133「, 」_score「:1.0, 「_source」:{「name」:「Ha Noi」,「address」:「Ha Noi,ViệtNam」,「locations」:{「lat」:16.4674,「lon」:107.591}} },{ 「_index」:「locations」, 「_type」:「location」, 「_id」:「138」, 「_score」:1.0, 「_source」:{「name」:「Cau gia Vien」,「地址「:」Le Duan,ThừaThiênHuế,ViệtNam「,」locations「:{」lat「:16.4601,」lon「:107.571}},{ 」_index「:」locations「, 」_type「 :「location」, 「_id」:「134」, 「_score」:1.0, 「_source」:{「name」:「TP Ho Chi Minh」,「address」:「TP胡志明,ViệtNam 「,」locations「:{」lat「:16.4674,」lon「:107.591}} },{ 」_ index「:」locations「, 」_type「:」location「, 」_id「:」139「, 」_score「:1.0, 」_source「:{」name「:」Chua thien Pagoda「,」address 「:」Kim Long,ThừaThiênHuế,ViệtNam「,」locations「:{」lat「:16.4537,」lon「:107.545}}, 」_index「:」locations「 「location」, 「_id」:「130」, 「_score」:1.0, 「_source」:{「name」:「ViệtNam」,「address」:「ViệtNam」,「locations」 LAT 「:16.9054」 LON「:106。576}} },{ 「_index」: 「位置」, 「_type」: 「位置」, 「_id」: 「135」, 「_score」:1.0, 「_source」:{ 「名稱」 :「Dai Noi Hue」,「address」:「23/8,ThừaThiênHuế,ViệtNam」,「locations」:{「lat」:16.4698,「lon」:107.577}} }]}}

當我運行與關鍵字=「越南」

result : 
_id = [131,132,,133,134,135,136,137,138,139,130] # => OK working 

查詢,但我與keywork =「順化」

運行查詢時
result : 
    _id = [132,135,139] # => Don't working ???, should have been: _id = [132,135,136,137,138,139] 

同樣的,keywork = 「色相」

result : 
     _id = [132,135] # => Don't working ???, should have been: _id = [132,135,136,137,138,139] 

包含上述詞的搜索結果如何(添加類型,或做任何事情)

回答

0

您聲明場address時有一個錯誤。您聲明address.address而不是address.folded。換句話說,聲明應該是:

field :address, type: 'string', analyzer: 'standard' do 
    field :folded, type: 'string', analyzer: 'folding' 
end