Хранение частот токенов в эластичном поиске вместо хранения текста - PullRequest
0 голосов
/ 04 марта 2019

Насколько я понимаю после прочтения документов, работает эластичный поиск в том, что он учитывает частоту терминов * частоту обратного термина.Он преобразует текст в некоторый словарь терминов частоты, который также включает в себя индексы мест, где эти термины наиболее часто встречаются.

Я пытаюсь не хранить текст, а использовать частоты терминов для каждой строки данных.,Поиск работает нормально, когда я просто загружаю полный текст, но он не будет хорошо работать в полномасштабном решении с 10 + мил страниц текста.Разве не было бы более эффективно хранить только частоты терминов, если содержание текста в противном случае не имеет значения?

edit: анонимность данных также имеет значение, и поэтому я не хотел бы, чтобы полные предложения и абзацы сохранялись внешне.

1 Ответ

0 голосов
/ 07 марта 2019

Для ваших целей вы могли бы реализовать термин-вектор в текстовом поле для термина частоты.Пожалуйста, прочитайте документацию здесь .Тогда вы можете использовать массовый запрос для termvector, который имеет вид mtermvector- doc здесь и python api doc .Работает со списком идентификаторов.Например, если у вас есть список всех идентификаторов ваших документов, которые соответствуют «небу», вы можете действовать следующим образом:

from elasticsearch import Elasticsearch

es = Elasticsearch()

index = "abc"
my_doc_type ="your_doc_type"
ids = []

result = es.search(index="abc", doc_type= my_doc_type body={"query": {"term": {"my_field":  "sky"}}})     

for res in in result['hits']['hits']:
    ids.append(res['ids'])




for doc in es.mtermvectors(index=index,doc_type=doc_type,body=dict(ids=ids,parameters=dict(term_statistics=True,field_statistics=True,fields=fields)))['docs']:                                                                                                                                                            
    fields = doc['term_vectors']  
    terms = field['terms']  
    tf = vec["term_freq"]
    df =  vec["doc_freq"]
...