Я пытаюсь fake index per user, но мои идентификаторы пользователя - это электронные письма. Когда у меня есть @
в моих псевдонимах, поиск пуст.Существуют ли запрещенные символы для псевдонимов elasticsearch?
Например, если я создаю один индекс my_index
и два псевдонима my_alias
и [email protected]
, как показано ниже, поиск my_alias работает отлично, и мой @ лейас не является:
curl -XPUT 'elasticsearch:9200/my_index'
{"acknowledged":true}
curl -XPUT 'elasticsearch:9200/my_index/_alias/my_alias -d '{"routing": "my_alias", "filter": {"term": {"doc_id": "my_alias"}}}'
{"acknowledged":true}
curl -XPUT 'elasticsearch:9200/my_index/_alias/[email protected]' -d '{"routing": "[email protected]", "filter": {"term": {"doc_id": "[email protected]"}}}'
{"acknowledged":true}
curl -XPUT 'elasticsearch:9200/my_alias/doc/1' -d '{doc_id:"my_alias", title: "hello world"}'
{"_index":"my_index","_type":"doc","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}
curl -XPUT 'elasticsearch:9200/[email protected]/doc/2' -d '{doc_id:"[email protected]", title: "hello dude"}'
{"_index":"my_index","_type":"doc","_id":"2","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}
curl -XGET 'elasticsearch:9200/my_alias/doc/_search?pretty=true' -d'{"query": {"match": {"title": "hello"}}}'
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.19178301,
"hits" : [ {
"_index" : "my_index",
"_type" : "doc",
"_id" : "1",
"_score" : 0.19178301,
"_routing" : "my_alias",
"_source" : {
"doc_id" : "my_alias",
"title" : "hello world"
}
} ]
}
}
curl -XGET 'elasticsearch:9200/[email protected]/doc/_search?pretty=true' -d'{"query": {"match": {"title": "hello"}}}'
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"hits" : {
"total" : 0,
"max_score" : null,
"hits" : [ ]
}
}
Что меня озадачивает, что нет Invalid Alias Name Exception
, и результат поиска в порядке, но пустой.
Я пробовал также с url-кодированием %40
: elasticsearch:9200/my%40lias
, но это то же самое.
Если я ищу по всему индексу, я вижу два документа. Если я создаю индекс с @
, поиск индексов также в порядке. Если я завить _aliases, чтобы увидеть состояние ES можно увидеть:
"my_index" : {
"aliases" : {
"[email protected]" : {
"filter" : {
"term" : {
"doc_id" : "[email protected]"
}
},
"index_routing" : "[email protected]",
"search_routing" : "[email protected]"
},
"my_alias" : {
"filter" : {
"term" : {
"doc_id" : "my_alias"
}
},
"index_routing" : "my_alias",
"search_routing" : "my_alias"
}
}
},
Видите вы причину такого поведения? Я что-то пропустил?
невного я упомянул, что я попробовал это, но это не проблема кодирования унифицированного либо, я редактирую пост –
Хм, это, возможно, придется делать с как вы используете маршрутизацию. – Val
ну, может быть, но это точно так же, как ссылка выше, и она работает с одним, а не с другим ... –