2015-08-14 67 views
0

我最近試圖使用彈性搜索。不過,我奮力查詢以下情形: 我有我的指數設置了這樣的:查詢彈性搜索where word索引有空間

"analysis": { 
    "index_analyzer": { 
     "my_index_analyzer": { 
      "type": "custom", 
      "tokenizer": "standard", 
      "filter": ["standard", "lowercase", "nGram"], 
      "char-filter": ["my_pattern"] 
     } 
    }, 
    "search_analyzer": { 
     "my_search_analyzer": { 
      "type": "custom", 
      "tokenizer": "standard", 
      "filter": ["standard", "lowercase", "nGram"], 
      "char-filter": ["my_pattern"] 
     } 
    }, 
    "filter": { 
     "nGram": { 
      "type": "nGram", 
      "min_gram": 3, 
      "max_gram": 40 
     } 
    }, 
    "char_filter" : { 
     "my_pattern":{ 
      "type":"pattern_replace", 
      "pattern":"\u0020", 
      "replacement":"" 
     } 
    } 

而被索引的文件是:

{ 
    name:'My self' 
}, 
{ 
    name:'Hell o' 
} 

如果我搜索自己,我期待它返回第一個JSON對象,但是這是不會發生..

我使用這個搜索(其中術語只是字符串被搜索):

var query = { 
      match: { 
       location: term 

      } 
     }; 
client.search({ 
      index: 'requests', 
      analyzer:'my_search_analyzer', 
      body: { 
       query:query 
      } 
     }) 

我真的很感激這方面的一些指導!

親切的問候 JB

回答

2

你就要成功了,你的索引定義只有一些小問題和拼寫錯誤,我們將解決:

  1. 你不需要index_analyzersearch_analyzer簡單地定義my_index_analyzermy_search_analyzer直接在analyzer元素下。
  2. char-filter應該讀char_filter(帶下劃線)
  3. 你的空間模式需要額外的反斜線

這是糾正設置/我用映射:

{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "my_index_analyzer": {   <--- 1. directly under analyzer 
      "type": "custom", 
      "tokenizer": "standard", 
      "filter": [ 
      "standard", 
      "lowercase", 
      "nGram" 
      ], 
      "char_filter": [    <--- 2. underscore 
      "my_pattern" 
      ] 
     }, 
     "my_search_analyzer": {  <--- 1. directly under analyzer 
      "type": "custom", 
      "tokenizer": "standard", 
      "filter": [ 
      "standard", 
      "lowercase", 
      "nGram" 
      ], 
      "char_filter": [    <--- 2. underscore 
      "my_pattern" 
      ] 
     } 
     }, 
     "filter": { 
     "nGram": { 
      "type": "nGram", 
      "min_gram": 3, 
      "max_gram": 40 
     } 
     }, 
     "char_filter": { 
     "my_pattern": { 
      "type": "pattern_replace", 
      "pattern": "\\u0020",  <--- 3. additional backslash 
      "replacement": "" 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "request": { 
     "properties": { 
     "location": { 
      "type": "string", 
      "index_analyzer": "my_index_analyzer" 
     } 
     } 
    } 
    } 
} 

然後你可以索引你的兩個示例文檔:

curl -XPUT localhost:9200/requests/request/1 -d '{"location":"My self"}' 
curl -XPUT localhost:9200/requests/request/2 -d '{"location":"Hell o"}' 

,你就會得到你所期望的:

curl -XPOST localhost:9200/requests/request/_search -d '{ 
    "query": { 
    "match": { 
     "location": "Myself" 
    } 
    } 
}' 

My self

+0

感謝瓦爾返回文檔,我真的很感謝這個!它完美的作品! –

+0

很高興我能幫忙;-) – Val