asticsearch фразу_prefix ожидаемые результаты
У меня странное поведение с упругим поиском. Я использую пользовательский анализатор с пользовательским токенизатором, который разбрасывает слова в случае пробела, +, -.
когда я ищу
{
"query": {
"match_phrase_prefix": {
"name.default": {
"query": "paris oly"
}
}
}
}
Я получаю результаты, как и ожидалось, Парижская Олимпия и т.д.... но когда я ищу
{
"query": {
"match_phrase_prefix": {
"name.default": {
"query": "paris ol"
}
}
}
}
Я не получаю результатов вообще.
настройки:
"analysis": {
"analyzer": {
"customAnalyzer": {
"type": "custom",
"filter": "lowercase",
"tokenizer": "customTokenizer"
},
"tokenizer": {
"customTokenizer": {
"pattern": "[\\+\\s-]",
"type": "pattern"
}
}
}
отображение поля:
{
"name": {
"properties": {
"default": {
"type": "string",
"analyzer": "customAnalyzer"
}
}
}
}
образец части документа (запрошенное поле):
{
"name": {
"jp": "パリ オリンピア (劇場)",
"default": "Paris Olympia",
}
}
{
"TYPE_NAME": {
"dynamic_templates": [
{
"name": {
"path_match": "*name.*",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"analyzer": "customAnalyzer"
}
}
}
],
"properties": {
"point": {
"type": "geo_point"
}
}
}
}
1 ответ
Когда я попробовал проверить то, что вы написали, у меня это сработало. Я опубликую то, что я сделал, и вы можете посмотреть на это и посмотреть, сможете ли вы выяснить, что отличается от вашей настройки, и если у вас есть дополнительные вопросы, я постараюсь помочь.
Я создал индекс, используя опубликованные вами сопоставление и анализатор / токенизатор, а затем добавил опубликованный вами документ:
DELETE /test_index
PUT /test_index
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"analysis": {
"tokenizer": {
"customTokenizer": {
"pattern": "[\\+\\s-]",
"type": "pattern"
}
},
"analyzer": {
"customAnalyzer": {
"type": "custom",
"filter": "lowercase",
"tokenizer": "customTokenizer"
}
}
}
},
"mappings": {
"doc": {
"properties": {
"name": {
"properties": {
"default": {
"type": "string",
"analyzer": "customAnalyzer"
}
}
}
}
}
}
}
PUT /test_index/doc/1
{
"name": {
"jp": "パリ オリンピア (劇場)",
"default": "Paris Olympia"
}
}
Затем любой из опубликованных вами запросов вернул мне документ:
POST /test_index/_search
{
"query": {
"match_phrase_prefix": {
"name.default": {
"query": "paris oly"
}
}
}
}
...
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.38356602,
"hits": [
{
"_index": "test_index",
"_type": "doc",
"_id": "1",
"_score": 0.38356602,
"_source": {
"name": {
"jp": "パリ オリンピア (劇場)",
"default": "Paris Olympia"
}
}
}
]
}
}
или же
POST /test_index/_search
{
"query": {
"match_phrase_prefix": {
"name.default": {
"query": "paris ol "
}
}
}
}
...
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.38356602,
"hits": [
{
"_index": "test_index",
"_type": "doc",
"_id": "1",
"_score": 0.38356602,
"_source": {
"name": {
"jp": "パリ オリンピア (劇場)",
"default": "Paris Olympia"
}
}
}
]
}
}
Вот код, который я использовал для удобства:
http://sense.qbox.io/gist/4e58344580dcf01299f7cc2199d0fb7694d2a051
Так что должно быть что-то еще происходит. Можете ли вы сказать, что отличается от вашей настройки от того, что я пытался?
Изменить: мне пришлось изменить порядок токенизатор и анализатор, потому что в противном случае я получил ошибку. Так что вы можете посмотреть на это.