У меня есть индекс с фактически преобразованным текстом Word или PDF-документа в виде простого текста «document_texts», построенного на стеке Rails, ActiveModel — это DocumentText с использованием драгоценных камней рельсов elasticsearch для модели и API. Я хочу иметь возможность сопоставлять похожие текстовые документы или PDF-файлы на основе текста документа
Я смог сопоставить документы друг с другом, используя
response = DocumentText.search \
query: {
filtered: {
query: {
more_like_this: {
ids: ["12345"]
}
}
}
}
Но я хочу посмотреть, КАК был запрошен результирующий набор, какие термины запроса использовались для сопоставления документов.
Используя драгоценный камень API elasticsearch, я могу сделать следующее
client=Elasticsearch::Client.new log:true
client.indices.validate_query index: 'document_texts',
explain: true,
body: {
query: {
filtered: {
query: {
more_like_this: {
ids: ['12345']
}
}
}
}
}
Но я получаю это в ответ
{"valid":true,"_shards":{"total":1,"successful":1,"failed":0},"explanations":[{"index":"document_texts","valid":true,"explanation":"+(like:null -_uid:document_text#12345)"}]}
Я хотел бы узнать, как был построен запрос, он использует до 25 терминов для сопоставления, что это были за 25 терминов и как я могу получить их из запроса?
Я не уверен, возможно ли это, но я хотел бы посмотреть, смогу ли я получить 25 терминов, используемых анализатором elasticsearchs, а затем повторно применить запрос с повышенными значениями для терминов в зависимости от моего выбора.
Я также хочу выделить это в тексте документа, но попробовал это
response = DocumentText.search \
from: 0, size: 25,
query: {
filtered: {
query: {
more_like_this: {
ids: ["12345"]
}
},
filter: {
bool: {
must: [
{match: { documentable_type: model}}
]
}
}
}
},
highlight: {
pre_tags: ["<tag1>"],
post_tags: ["</tag1>"],
fields: {
doc_text: {
type_name: {
content: {term_vector: "with_positions_offsets"}
}
}
}
}
Но это ничего не дало, я думаю, я был довольно надежен. Я знаю, что это должно быть возможно, но было бы интересно узнать, сделал ли кто-нибудь это или лучший подход. Есть идеи?