我一直在使用弹性搜索项目,但我发现雪球分析仪的结果有点奇怪。Elasticsearch雪球分析仪需要精确的词
下面是我使用的Mapping的例子。
$myTypeMapping = array(
'_source' => array(
'enabled' => true
),
'properties' => array(
'id' => array(
'type' => 'integer',
'index' => 'not_analyzed'
),
'name' => array(
'type' => 'string',
'analyzer' => 'snowball',
'boost' => 2.0
),
'food_types' => array(
'type' => 'string',
'analyzer' => 'keyword'
),
'location' => array(
'type' => 'geo_point',
"geohash_precision"=> 4
),
'city' => array(
'type' => 'string',
'analyzer' => 'keyword'
)
)
);
$indexParams['body']['mappings']['online_pizza'] = $myTypeMapping;
// Create the index
$elastic_client->indices()->create($indexParams);
在quering的http://localhost:9200/online_pizza/online_pizza/_mapping
我得到下面的结果,
{
"online_pizza": {
"properties": {
"city": {
"type": "string",
"analyzer": "keyword"
},
"food_types": {
"type": "string",
"analyzer": "keyword"
},
"id": {
"type": "integer"
},
"location": {
"type": "geo_point",
"geohash_precision": 4
},
"name": {
"type": "string",
"boost": 2,
"analyzer": "snowball"
}
}
}
}
我的问题是,我有数据,其中有Name
场为 “米兰”。在查询“米兰”时,我得到了期望的结果,但如果我查询“米兰”或“米尔”,我找不到结果。
{
"query": {
"query_string": {
"default_field": "name",
"query": "Milan"
}
}
}
我也试过在查询期间雪球分析仪,没有帮助。
{
"query": {
"query_string": {
"default_field": "name",
"query": "Milan",
"analyzer": "snowball"
}
}
}
第二个问题是关键字搜索是区分大小写的,例如Pizza!= pizza,我该如何摆脱这种困境?
感谢,
Thankyou为适当的答案,非常清楚,如果我想让它搜索任何字符,但不使用stemmer规则,应该使用什么分析器。正则表达式 ? – 2014-10-30 09:52:32
也许[ngrams](http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_ngrams_for_partial_matching.html)将是正确的答案 – ThomasC 2014-10-30 09:58:09
真的很感谢你花时间回答这样的问题。非常感谢你 – 2014-10-30 10:08:43