Поиск списка ключевых слов в эластичной с использованием пакета Rastic - PullRequest
0 голосов
/ 31 октября 2019

Я делаю блестящее приложение, в котором пользователь может вводить файл терминов в excel и искать их в эластичных хранилищах. Файл Excel содержит один столбец ключевых слов и считывается в список, а затем я пытаюсь выполнить поиск каждого элемента в списке с помощью Search (). Я легко сделал это в Python с помощью цикла for для терминов и затем поиска в цикле for и получил точные результаты. Я понимаю, что это не так просто в R, но я не могу найти правильное решение. Я использую пакет Rastic и пытаюсь использовать разные версии Search () в течение дня. Раньше я не использовал эластичный язык, поэтому мои извинения за то, что я не слишком разбираюсь в синтаксисе. Я знаю, что мне нужно что-то сделать с aggs для получения списка терминов ..

По сути, я хочу выполнить поиск в поле source.body_ и хочу использовать match_phrase для поиска моих терминов.

Вот код, который у меня есть на Python, который работает, но мне нужно все в R для блестящего приложения и я не хочу использовать сетку.

queries = list()
    for term in my_terms:
        search_result = es.search(index="cars", body={"query": {"match_phrase": {'body_':term}}}, size = 5000)
        search_result.update([('term', term)])
        queries.append(search_result)

Я установил эластичное соединение как con и убедился, что оно может вернуть точные совпадения только по одному ключевому слову с:

match <- {"query": {"match_phrase" : {"body_" : "mustang"}}}

search_results <- Search(con, index="cars", body = match, asdf = TRUE)

Это сработало так, как я ожидал сявно определено только одно ключевое слово.

Итак, вот что я попробовал для списка my_terms:

aggs <- '{"aggs":{"stats":{"terms":{"field":"my_terms"}}}}'

queries <- data.frame()

for (term in my_terms) {

final <- Search(con, index="cars", body = aggs, asdf = TRUE, size = 5000)
rbind(queries, final)
}

Когда я запускаю это, он просто возвращает все вмоя резинка. Я также попытался запустить это с закомментированным циклом for, и это не сработало.

Я также попытался вставить my_terms в свой список совпадений из поиска по одному слову в начале этого сообщения, вот так:

match <- '{"query": {"match_phrase" : {"body_": "my_terms"}}}'

Search(con, index="cars", body = match, asdf = TRUE, size = 5000)

Это ничего не возвращает. Я пробовал так много комбинаций из списка aggs и match, но ничего не возвращает того, что я ищу. Любой совет будет высоко ценится, я чувствую, что до сих пор читал обо всем, и теперь я просто растерялся.

ОБНОВЛЕНИЕ: я понял это с

p <- data.frame()
for (t in the_terms$keyword) {
  result <- Search(con, index="cars", body = paste0('{"query": {"match_phrase" : {"body_":', '"', t, '"', '}}}'), asdf = TRUE, size = 5000)
  p <- rbind(p, result$hit$hit)
}
...