我尝试从使用ElasticSearch 0.90.3升级到2.0并遇到一些问题。最初设置和配置ES的人不再可用,所以我很少知道它是如何工作的。
他们将ES 0.90.3配置为使用ElasticSearch-ServiceWrapper和Tire,除此之外,只有一些小的配置更改。
在大多数情况下,升级顺利,我更换了封顶部署过程中的设置信息,现在安装ES 2.0而不是0.90.3并且服务即将到来,但是,我无法获得部分匹配在上班前发生。我需要设置一个标准过滤器,适用于将使用部分匹配搜索所有字段的所有搜索。我已经完成了大量的谷歌搜索,这是我能提出的最接近的,但它仍然没有返回部分匹配。
index:
settings:
analysis:
filter:
autocomplete_filter:
type: edge_ngram
min_gram: 2
max_gram: 32
analyzer:
autocomplete:
type: custom
tokenizer: standard
filter: [ lowercase, autocomplete_filter ]
mappings:
access_point_status:
properties:
text:
type: string
analyzer: autocomplete
search_analyzer: standard
我希望不需要更换Tire,因为这会使升级更加复杂,但如果问题出在查询中而不是设置中,那么我将走这条路。这是一个未返回所需结果的示例查询:
curl -X GET 'http://localhost:9200/access_point_status/_search?from=0&size=100&pretty' -d
'{ "query":
{ "bool":
{ "must": [
{ "match":
{ "_all":
{ "query":
"1925","type":"phrase_prefix"
}
}
}
]}
}
,"sort": [ { "name":"asc" } ]
,"filter": { "term": { "domain":"domain_1" } }
,"size":100,"from":0
}'
由于
答案 0 :(得分:0)
所以我发现了大部分问题。索引由Tire和data_tables使用不同的映射创建。一旦创建,就无法覆盖。
我创建了这些过滤器,然后将它们应用到字段
index:
analysis:
filter:
edge_ngram_filter:
type: edge_ngram
min_gram: 2
max_gram: 32
side: front
analyzer:
character_only:
type: custom
tokenizer: standard
filter: [ lowercase, edge_ngram_filter ]
special_character:
type: custom
tokenizer: keyword
filter: [ lowercase, edge_ngram_filter ]
我与95%的事情相匹配
curl -X GET 'http://localhost:9200/access_point_status/_search from=0&size=100&pretty' -d '
{
"query":
{
"bool":
{
"must":[
{
"prefix":
{
"_all":"bsap-"
}
}]
}
},"sort":[
{
"name":"asc"
}],"filter":
{
"term":
{
"domain":"domain_1"
}
},"size":100,"from":0
}'
我唯一缺少的是匹配特殊字符,不匹配大写字符。我尝试了几种类型的查询,query_string似乎与任何部分都不匹配。有人对其他问题有什么想法吗? 我需要匹配mac地址,ip,然后组合文本/数字字段和-_,。作为分隔符。