2015-12-04 4 views
1

Я пытаюсь использовать ElasticSearch 1.7.3 для реализации функции «Вы» для поисковой системы моей компании. Я следил за документацией, чтобы настроить Phrase Suggestester, и создал настраиваемое сопоставление для поддержки этого.Encountering ElasticsearchIllegalArgumentException при использовании фразы. Указатель

Однако, когда я делаю запрос _suggest, я получаю ElasticsearchIllegalArgumentException[Suggester[simple_phrase] not supported]. Что я делаю не так?

Это мой запрос:

POST knowledge_graph/entities/_suggest 
{ 
    "suggest": { 
    "text" : "apple in", 
    "simple_phrase": { 
     "phrase" : { 
     "field" : "canonical_name" 
     } 
    } 
    } 
} 

Я получаю следующий ответ:

{ 
    "_shards": { 
    "total": 5, 
    "successful": 0, 
    "failed": 5, 
    "failures": [ 
     { 
     "index": "knowledge_graph", 
     "shard": 0, 
     "status": 500, 
     "reason": "BroadcastShardOperationFailedException[[knowledge_graph][0] ]; nested: ElasticsearchException[failed to execute suggest]; nested: ElasticsearchIllegalArgumentException[Suggester[simple_phrase] not supported]; " 
     }, 
     ... 
    ] 
    } 
} 

Вот параметры моего индекса и отображения:

{ 
    "knowledge_graph": { 
    "aliases": {}, 
    "mappings": { 
     "entities": { 
     "properties": { 
      "autocomplete": { 
      "type": "completion", 
      "analyzer": "simple", 
      "payloads": true, 
      "preserve_separators": true, 
      "preserve_position_increments": true, 
      "max_input_length": 50 
      }, 
      "canonical_name": { 
      "type": "string", 
      "analyzer": "simple", 
      "fields": { 
       "shingles": { 
       "type": "string", 
       "analyzer": "simple_shingle_analyzer" 
       } 
      } 
      }, 
      "entity_query": { 
      "properties": { 
       "simple_phrase": { 
       "properties": { 
        "phrase": { 
        "properties": { 
         "field": { 
         "type": "string" 
         } 
        } 
        } 
       } 
       }, 
       "text": { 
       "type": "string" 
       } 
      } 
      }, 
      "suggest": { 
      "properties": { 
       "simple_phrase": { 
       "properties": { 
        "phrase": { 
        "properties": { 
         "field": { 
         "type": "string" 
         } 
        } 
        } 
       } 
       }, 
       "text": { 
       "type": "string" 
       } 
      } 
      } 
     } 
     } 
    }, 
    "settings": { 
     "index": { 
     "creation_date": "1449251691345", 
     "analysis": { 
      "filter": { 
      "shingles_1_6": { 
       "type": "shingle", 
       "max_shingle_size": "6", 
       "output_unigrams_if_no_shingles": "true" 
      } 
      }, 
      "analyzer": { 
      "simple_shingle_analyzer": { 
       "type": "custom", 
       "filter": [ 
       "lowercase", 
       "shingles_1_6" 
       ], 
       "tokenizer": "standard" 
      } 
      } 
     }, 
     "number_of_shards": "5", 
     "number_of_replicas": "0", 
     "version": { 
      "created": "1070399" 
     }, 
     "uuid": "g_Yp7z6kQHCDRtd6TvVlzQ" 
     } 
    }, 
    "warmers": {} 
    } 
} 

ответ

1

Там два способа для выполнения suggest запросов, один с _search конечной точкой, а другой с _suggest конечная точка.

От Docs

Предлагайте запросы выполняются против _suggest конечной точки следует опустить окружающих предложить элемент, который используется только, если предположить, запрос является частью поиска.

Ваш запрос будет работать, если вы выполняете его против _search апи

POST knowledge_graph/entities/_search <---- here 
{ 
    "suggest": { 
    "text" : "apple in", 
    "simple_phrase": { 
     "phrase" : { 
     "field" : "canonical_name" 
     } 
    } 
    }, 
    "size" : 0 
} 

Если вы хотите запросить с _suggest конечной точки попробовать этот

POST knowledge_graph/_suggest 
{ 
    "suggest": { 
    "text": "apple in", 
    "phrase": { 
     "field": "canonical_name" 
    } 
    } 
} 

Примечание - Я думаю, вы должны быть фраза, предлагаемая против canonical_name.shingles

+0

Спасибо за ответ, но, к сожалению, что-то явно отключено моим ElasticSearch. Когда я делаю ваш запрос против конечной точки '_search', я просто возвращаю каждый документ (т. Е. Похоже на пустой поиск). Когда я пытаюсь выполнить ваш запрос '_suggest', я возвращаю ответ, подтверждающий, что я проиндексировал документ с' _id' как '_suggest' – oxymor0n

+1

add' "size: 0' в' _search', чтобы видеть только предложения и с 'предложить' выполнить запрос только по индексу и не печатать, я сожалею об этом, см. мой обновленный ответ. – ChintanShah25

Смежные вопросы