运行弹性版本1.6
我正在尝试在elasticsearch中为我的索引设置自定义分析器。我的索引/有一些包含一些重音和特殊字符的属性。
就像我的某个属性名称有这样的值,“name”=> “Estáloca”。 所以我想要实现的是,每当我试图通过这种方式搜索时, http://localhost:9200/tutorial/helloworld/_search?q=esta
我应该得到“Estáloca”的结果。我已经通过以下链接和配置必要的分析器,在链接中解释。 https://www.elastic.co/guide/en/elasticsearch/guide/current/asciifolding-token-filter.html
curl -XPUT 'localhost:9200/tutorial?pretty' -H 'Content-Type: application/json' -d'
{
"mappings":{
"helloworld":{
"properties": {
"name": {
"type": "string",
"analyzer": "standard",
"fields": {
"folded": {
"type": "string",
"analyzer": "folding"
}
}
}
}
}
},
"settings": {
"analysis": {
"analyzer": {
"folding": {
"tokenizer": "standard",
"filter": [ "lowercase", "asciifolding" ]
}
}
}
}
}'
我在创建索引时配置了这个,并为测试做了一些这样的条目,
curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "name": "Está loca!" }'
curl -X POST 'http://localhost:9200/tutorial/helloworld/2' -d '{ "name": "Está locá!" }'
但是这样搜索, http://localhost:9200/tutorial/helloworld/_search?q=esta 一切都没有发生。我只想要用户搜索任何语言,例如英语,它应该得到相同的结果。请任何人都可以提供帮助,我怎样才能在过去1周内实现这一目标。
答案 0 :(得分:1)
您将无法在_all
字段中搜索_all
个关键字。由于弹性搜索默认情况下仅在构建GET folding_index1/helloworld/_search?q=esta
field时使用标准分析器。
所以您的以下查询
GET folding_index1/helloworld/_search
{
"query": {
"match": {
"_all": "esta"
}
}
}
在弹性dsl。中生成以下匹配查询。
_all
针对include_in_all
字段进行哪次搜索,因此无法找到折叠后的令牌。
您可以执行以下操作,但即使在多字段中提及PUT folding_index1
{
"mappings": {
"helloworld": {
"properties": {
"name": {
"type": "string",
"analyzer": "standard",
"fields": {
"folded": {
"type": "string",
"analyzer": "folding",
"include_in_all": true
}
}
}
}
}
},
"settings": {
"analysis": {
"analyzer": {
"folding": {
"tokenizer": "standard",
"filter": ["lowercase", "asciifolding"]
}
}
}
}
}
,它仍然会为_all字段应用标准分析器。
POST folding_index1/_search?q=name.folded:esta
以下查询可以为您服务。更多关于_all field analyzer
sed -i 's/(\x00\x00+...\x00)/\1\n/g' filename
答案 1 :(得分:0)
此链接也对我有很大帮助,为我的方案提供了精确的分析器。
https://vanwilgenburg.wordpress.com/2013/08/03/diacritics-in-elasticsearch/