2016-08-01 3 views
0

Я строю вопрос бота, и до сих пор я использовал mongodb. Однако я только что открыл elasticsearch, и он выглядит очень мощным.Приговор к запросам ключевых слов в Elasticsearch

У меня есть база данных «с псевдонимом документов», что означает, что каждый документ имеет поле «псевдонимы», которое представляет собой массив возможных имен, которые кто-то может назвать.

Например:

Events Collection: 
{ 
    name: "Birthday Party", 
    aliases: ["birthday", "birthday party", "birthday"], 
    place: "Tom's house" 
}, 
{ 
    name: "Bowling Night", 
    aliases: ["bowling", "bowling night"], 
    place: "Tom's Alley" 
} 

Где будут мои запросы предложений, как это: «? Сколько времени будет день рождения быть в» «Где боулинг?»

Псевдонимы уникальны в базе данных, поэтому в приведенных выше запросах мне хотелось бы вернуть документ «День рождения» в первом и «Боулинг-Ночь» во втором.

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

Есть ли запрос в elasticsearch, который может сделать что-то вроде этого?

ответ

0

Возможно, вам не нужно делать все «псевдонимы», как вы его называете, Elasticsearch имеет некоторые встроенные функции, которые помогут вам не сломать пот!

Например, если индекс следующий документ:

{ 
    "name": "Bowling Night" 
} 

По умолчанию name поле будет сохранено в качестве анализируемой string, что означает, что Elasticsearch будет разметить и индексировать его для вас, так что при запуске этот запрос

{ 
    "query": { 
    "query_string": "Where is bowling?" 
    } 
} 

это сломает предложение на отдельные слова и добавить условие «иЛИ» между каждым словом и, следовательно, будет соответствовать для документа, что ваш проиндексированы. Он также предоставит оценку для документа и будет сортироваться в соответствии со счетом в случае, если у вас есть несколько совпадений (чем больше слов он может соответствовать, тем выше оценка).

Некоторые подробнее о query string queries и Analyzers

+0

Wow я не ожидал, что это действительно здорово, я пока не могу upvote, но +1! –

+0

Просто попробовал, и я взорвался, это абсолютно удивительное святое дерьмо! –

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