2014-08-27 109 views
0

我已經使用以下設置配置了我的索引,並且matchAll查詢結果在字段IPRANGE中具有值「trial」。ElasticSearch edge-ngram不起作用

的設置:

{ 
     "settings" : { 
      "analysis": { 
       "filter": { 
        "autocomplete_filter": { 
         "type":  "edge_ngram", 
         "min_gram": 1, 
         "max_gram": 5 
        } 
       }, 
       "analyzer": { 
        "autocomplete": { 
         "type":  "custom", 
         "tokenizer": "standard", 
         "filter": [ 
          "lowercase", 
          "autocomplete_filter" 
         ] 
        } 
       } 
      } 
     }, 
      "mappings" : { 
       "users" : { 
        "properties" : { 
         "IPRANGE" : { 
          "type" : "string", 
          "analyzer" : "autocomplete" 
         } 
        } 
       } 
      }, 
       refresh_interval: "1000" 
    } 

但是,當我用以下的有效載荷它不返回的結果,即搜索是0命中。

網址:

http://xxxxxx:9200/db2/users/_search 

有效載荷:

{ 

    "query": { 

    "match": { 

    "IPRANGE": "tr" 

    } 

    } 

} 

可能是什麼問題?

回答

1

你是如何編制索引文件的?這是一個可用的示例:

我改變了映射,以便autocomplete分析器用於索引IPRANGE字段,當在字段中搜索時將使用默認分析器(您不想分割搜索項以同樣的方式)。

/POST http://localhost:9200/test 
{ 
    "settings": { 
     "analysis": { 
      "filter": { 
       "autocomplete_filter": { 
        "type": "edge_ngram", 
        "min_gram": 1, 
        "max_gram": 5 
       } 
      }, 
      "analyzer": { 
       "autocomplete": { 
        "type": "custom", 
        "tokenizer": "standard", 
        "filter": [ 
         "lowercase", 
         "autocomplete_filter" 
        ] 
       } 
      } 
     } 
    }, 
    "mappings": { 
     "users": { 
      "properties": { 
       "IPRANGE": { 
        "type": "string", 
        "search_analyzer": "autocomplete" 
       } 
      } 
     } 
    } 
} 

索引文件

/POST http://localhost:9200/test/users/1/ 
{ 
    "IPRANGE":"trial" 
} 

搜索請求:

/POST http://localhost:9200/test/users/_search 
{ 
    "query": { 
    "match": { 
     "IPRANGE": "tr" 
    } 
    } 
} 

返回以下結果:

{ 
    took: 10 
    timed_out: false 
    _shards: { 
     total: 5 
     successful: 5 
     failed: 0 
    } 
    hits: { 
     total: 1 
     max_score: 0.30685282 
     hits: [ 
      { 
       _index: test 
       _type: users 
       _id: 1 
       _score: 0.30685282 
       _source: { 
        IPRANGE: trial 
       } 
      } 
     ] 
    } 
} 
+0

我需要重新啓動elasticsearch服務器的設置應用?另外有沒有重新索引而不是重新啓動的API? – 2014-08-28 10:30:29

+0

您可以使用'_mapping PUT' API更改'用戶'映射,它會將舊映射與新映射合併:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices -put-mapping.html。然後你需要重新索引文件。如果你有大量的文件看看重新索引插件:https://github.com/karussell/elasticsearch-reindex – 2014-08-28 10:52:07