2016-10-14 11 views
0

Я попытался установить новый индекс, настроив его отображение и настройки.Определения отображения и определения Elasticsearch

Вот код, который я использовал:

POST /test/text 
{ 
    "settings": { 
    "analysis": { 
     "filter": { 
     "greek_stop": { 
      "type":  "stop", 
      "stopwords": "_greek_" 
     }, 
     "greek_lowercase": { 
      "type":  "lowercase", 
      "language": "greek" 
     }, 
     "greek_stemmer": { 
      "type":  "stemmer", 
      "language": "greek" 
     } 
     }, 
     "analyzer": { 
     "greek": { 
      "tokenizer": "standard", 
      "filter": [ 
      "greek_lowercase", 
      "greek_stop", 
      "greek_stemmer" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "article": { 
     "properties": { 
     "title": { 
      "type": "string", 
      "fields": { 
      "greek": { 
       "type": "string", 
       "analyser": "greek" 
       } 
       } 
     }, 
     "content": { 
      "type": "string", 
      "fields": { 
      "greek": { 
       "type": "string", 
       "analyser": "greek" 
       } 
       } 
     }, 
     "indexed_date": { 
      "type": "date", 
      "format": "strict_date_optional_time||epoch_millis" 
     } 
     } 
    } 
    } 
} 

Я использовал POST, как я даже не позаботился о _id и таким образом ES дает случайное значение этой переменной, вместо использования PUT, где я должен укажите его значение. Причина, по которой я создал два поля для заголовка и контента, заключается в том, что я хочу иметь исходную версию текста и версию «stop words removed-stemmed», чтобы иметь возможность весить выше, если этот термин найден точно так же, как введенный пользователем он (вместо того, чтобы хранить только стебли версии слова)

После заполнения индекса с данными, например:

PUT /test/text 
{ 
    "title": " ", 
    "content": " ", 
    "date": " " 
} 

Я пытался делать поисковый запрос, как это:

GET /test/text/_search 
{ 
    "query":{ 
     "multi_match":{ 
       "query":"όμορφος", 
       "type":"most_fields", 
       "fields":["content","content.greek","title","title.greek"]}}} 

И то, изменив запрос на «όμορφη», эти слова hav e такая же версия, что и «όμορφ», и в результате благодаря греческому языковому анализатору ES я должен получить ту же запись, которой я не занимаюсь.

Любая идея, почему? Должен ли я делать что-то еще при индексировании моих документов? После прочтения документации у меня сложилось впечатление, что после определения отображения при индексировании фрагмента текста он автоматически будет индексироваться в обоих направлениях, и запрос будет каждый раз анализироваться с использованием соответствующего анализатора автоматически.

Если у меня есть правильное впечатление, почему мой запрос не возвращает те же результаты? Есть идеи?

Заранее спасибо.

ответ

0

Чтобы создать индекс в первую очередь, вам необходимо позвонить в PUT test, а не POST /test/text. Последний просто создаст новый документ типа text в новом индексе test, но с настройками по умолчанию и сопоставлениями.

Так первый:

PUT /test 
{ 
    "settings": { 
    ... 
    }, 
    "mappings": { 
    ... 
    } 
} 

Затем вы можете создавать новые документы (обратите внимание, что ваш тип отображения называлось article, не text)

POST /test/article 
{ 
    "title": " ", 
    "content": " ", 
    "date": " " 
} 

Только тогда ваш поисковый запрос будет работать

+0

Когда я пытаюсь создать индекс с POST, я получаю: { "_index": "test", " _type ": "Текст", "_id": "AVfDJVLHvgDv319PJqTd", "_version": 1, "_shards": { "всего": 2, "успешно": 1, "не удалось": 0 }, "создано": правда } с другой стороны, с PUT я получаю: не найдено обработчика для URI [/ тест/статьи] и метод [Put] Любая идея, почему? Когда я создаю/тест вместо/тест/текст, который я получаю: "типа": "mapper_parsing_exception", "причина": "определение Mapping для [полей] неподдерживаемые параметры: [анализатор: греческий]" – Swan87

+0

Поскольку I не хотите, чтобы настроить греческий анализатор можно просто сделать: «отображения»: { «my_type_name»: { «свойства»: { «название»: { «типа»: «текст», «анализатор» : «английский» } } } } вместо того, чтобы включать в себя все это определение? – Swan87

+0

При создании индекса вы ДОЛЖНЫ иметь 'PUT' и только имя вашего индекса. При создании документа вы можете либо «POST index/type», либо «PUT index/type/id». Удалите свой индекс и начните снова с моего предложения выше. – Val

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