因此,我需要做的是将XML文件中的一些信息传递到elasticsearch中,然后使用tfidf权重对其进行搜索。我还需要输出前20个最佳结果。我想用python做到这一点。
到目前为止,我已经能够通过创建数组,然后通过类似json的格式对它们进行索引,来通过python传递XML数据并成功创建索引。我知道这意味着在索引通过Elasticsearch可用的大多数其他选项时,会获得默认值,但是我无法找到一种以其他方式实现此目的的方法。由于所有数据都已传递到索引中,因此我要做的就是搜索它。我得到了包含标题的10个文档和包含的文本的一个小摘要,我需要通过elasticsearch用tfidf返回前20个结果。这是我收集需要在索引中搜索的10个文本文件的方式,这也是我尝试搜索它们的方式。
queries = []
with open("testingQueries.txt") as file:
queries = [i.strip() for i in file]
for query_text in queries:
query = {
'query': {
'more_like_this': {
'fields': ['document.text'],
'like': query_text
}
}
}
results = es.search(index=INDEX_NAME, body=query)
print(str(results) + "\n")
您可以看到,我没有在此查询中添加分析器,也不知道如何添加tfidf权重以在数据中搜索这些查询。我一直在到处寻找答案,但是大多数答案不是与python相关,还是不能真正解决我的问题。我得到的搜索结果也没有给我排名前20的结果...实际上,它们没有给我任何结果。输出看起来像这样:{'took':14,'timed_out':False,'_shards':{'total':5,'successful':5,'skipped':0,'failed':0},' hits':{'total':0,'max_score':None,'hits':[]}}
当我尝试使用'match'而不是'more_like_this'进行相同操作时,我的点击率得到了更多的结果,但是我仍然需要tfidf得分以及与我的查询类似的前20个文档的结果。