2015-07-28 30 views
1

考慮,這是我的映射和設置區分大小寫的搜索不工作

$arr = [ 
     'index' => 'test1', 
     'body' => [ 
      'settings' => [ 
       'analysis' => [ 
        'analyzer' => [ 
          'name_analyzer' => [ 
          'type' => 'custom', 
          'tokenizer' => 'standard', 
          'filter' => [ 
           'lowercase', 
           'asciifolding', 
           'word_delimiter' 
          ] 
         ] 
        ] 
       ] 
      ], 
      "mappings" => [ 
       "info" => [ 
        "properties" => [ 
         "Name" => [ 
          "type" => "string", 
          "index" => "analyzed", 
          "analyzer" => "name_analyzer" 
         ], 
         "Address" => [ 
          "type" => "string", 
          "index" => "analyzed", 
          "analyzer" => "name_analyzer" 
         ] 
        ] 
       ] 
      ] 
     ] 
    ]; 

後指數兩名&地址爲

  1. ABC some_address1
  2. 美國廣播公司some_address2

時我搜索名字'A',我沒有得到任何結果的文件。
但是當我搜索名稱'a'我得到的結果中的文件

所以我的問題是即使我已設置分析器爲什麼我的搜索不區分大小寫?

我的搜索查詢

$query['index'] = 'test1'; 
    $query['type'] = 'info'; 
    $query['body'] = [ 
     'query'=> [ 
      'bool' => [ 
       'should' => [ 
        [ 
         'prefix' => [ 
          'Name' => 'a' 
         ] 
        ] 
       ] 
      ] 
     ] 
    ]; 
+1

請出示您的實際代碼 – RiggsFolly

+0

如果您發佈查詢這將是有益的:

如果這不是一個選項,您可以按如下方式使用一個query string用通配符。有些查詢,如術語查詢,在查詢時不會通過分析器,因此您不會得到任何結果。 – moliware

回答

0

您使用的是prefix query,因爲醫生說,前綴是不是在查詢時分析。這意味着如果您將A作爲前綴,它將不會匹配任何內容,因爲Name字段正在縮小。

因此,如果您想繼續使用前綴查詢,我會建議您手動使小寫前綴。

$query['index'] = 'test1'; 
    $query['type'] = 'info'; 
    $query['body'] = [ 
     'query'=> [ 
      'bool' => [ 
       'should' => [ 
        [ 
         'query_string' => [ 
          'default_field' => 'Name', 
          'query' => 'A*', 
          'analyze_wildcard' => 'true' 
         ] 
        ] 
       ] 
      ] 
     ] 
    ]; 
+0

當然這個查詢給了我結果中的name = abc,但是我還需要'Abc'。如何去做? – nm10

+0

用'a'作爲前綴的前綴查詢會給你'name = abc'和'name = Abc'。並且查詢字符串與'A *'或'a *'同樣也會給你 – moliware

+0

我使用的是你所建議的同樣的查詢,這是我輸出的結果''012''''''''' 「timed_out」 :假, 「_shards」:{ 「總」:5, 「成功」:5, 「失敗」:0 }, 「命中」:{ 「總」:1, 「MAX_SCORE」: 1, 「命中」:[ { 「_index」: 「測試1」, 「_type」: 「信息」, 「_id」: 「1」, 「_score」:1, 「_source」:{ 「Name」:「abc」, 「地址」:「CHembur媽媽。 81" } } ] } }'我不結果得到NAME = 'ABC'。爲什麼它不工作的哥們? – nm10