2016-09-22 52 views
0

我想寫一個自定義分析器,它打破特殊字符上的標記並在索引前將其轉換爲大寫,我應該能夠得到結果,如果我搜索小寫也..自定義分析器打破特殊字符和小寫/大寫的標記

例如,如果我給數據@源 - 它應該用空白替換@任何特殊的字符,它應該用空白替換,並給我像數據源的結果。

以下是我嘗試實施的方法。

PUT sound 
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "my_analyzer": { 
      "tokenizer": "standard", 
      "char_filter": [ 
      "my_char_filter" 
      ], 
      "filter": [ 
      "uppercase" 
      ] 
     } 
     }, 
     "char_filter": { 
     "my_char_filter": { 
      "type": "pattern_replace", 
      "pattern": "(\\d+)-(?=\\d)", 
      "replacement": "$1 " 
     } 
     } 
    } 
    } 
} 


POST sound/_analyze 
{ 
    "analyzer": "my_analyzer", 
    "text": "data-source&abc" 
} 

它拆分令牌嗯,就像 -

{ 
    "tokens": [ 
     { 
     "token": "DATA", 
     "start_offset": 0, 
     "end_offset": 4, 
     "type": "<ALPHANUM>", 
     "position": 0 
     }, 
     { 
     "token": "SOURCE", 
     "start_offset": 5, 
     "end_offset": 11, 
     "type": "<ALPHANUM>", 
     "position": 1 
     }, 
     { 
     "token": "ABC", 
     "start_offset": 12, 
     "end_offset": 15, 
     "type": "<ALPHANUM>", 
     "position": 2 
     } 
    ] 
} 

但是,如果我在這個以小寫甚至大寫字母搜索,它不工作..喜歡:

GET sound/_search?text="data" 

GET sound/_search?text="data" 

GET /sound/_search 
{ 
    "query": { 
    "match": { 
     "text": "data" 
    } 
    } 
} 

它沒有給我的結果,如果我像上面的查詢搜索..

+1

請參考這個答案:http://stackoverflow.com/a/ 39662994/4604579 – Val

回答

0

你只需要使用一些稍微不同的語法您的搜索:

GET sound/_search?q=data 

GET sound/_search?q=data 

POST sound/_search 
{ 
    "query": { 
    "match": { 
     "NAME_OF_YOUR_FIELD": "data" 
    } 
    } 
} 

NAME_OF_YOUR_FIELD需要爲你存儲在您的數據字段的名稱更多的Infor在match query here

+0

嗨Ceilingfish-它仍然不適合我!我嘗試了你給出的選項。 –

+0

/Downloads/elasticsearch-2.4.0/bin$ curl -XGET http:// localhost:9200/sound/_search?q ='text' {「took」:8,「timed_out」:false,「_ shards」: {「total」:5,「success」:5,「failed」:0},「hits」:{「total」:0,「max_score」:null,「hits」:[]}}我無法用GET檢索結果。 –

+0

curl -XGET'http:// localhost:9200/sound/_search?pretty' - 即使這看起來不工作。 –

相關問題