2014-08-27 110 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