Я делаю блестящее приложение, в котором пользователь может вводить файл терминов в 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)
}