ElasticSearch edge-ngram不起作用
问题描述:
我已经使用以下设置配置了我的索引,并且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"
}
}
}
可能是什么问题?
答
你是如何编制索引文件的?这是一个可用的示例:
我改变了映射,以便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
}
}
]
}
}
我需要重新启动elasticsearch服务器的设置应用?另外有没有重新索引而不是重新启动的API? – 2014-08-28 10:30:29
您可以使用'_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