我是ES的新手,
我正在使用ingest-attachments-processor-plugin和elasticsearch索引pdf书籍,以便将我的查询结果作为PER命中而不是结果PER文档返回。例如,如果我正在索引多个pdf书籍,我想大致返回每个匹配发生的段落,这样如果1个文档中有3个匹配,则应该有3个结果(段落)&如果在另一个文档中也有2次点击,则应该有5次点击。目标是创建一个工具,从这些书籍中检索正确的答案。
1)弹性搜索是否可行? Solr能解决这个问题吗? 2)如何让它返回说一段,我不相信ES理解句子结构吗?有插件吗? 3)我是否应该逐段解析文档(如Watson使用文档转换API对答案单元进行解析)然后索引到ES?
这是我目前在python中使用的查询:
def execute_es_query(query_input, index, doc_type):
body_query = {
"stored_fields": [],
"query": {
"query_string": {
"default_field": "attachment.content",
"query": query_input
}
},
"highlight": {
"pre_tags": "<span>",
"post_tags": "</span>",
"fields": {
"attachment.content":{}
}
}
}
response = es_client.search(index= index, doc_type = doc_type, body = body_query)
return response['hits']['hits']
def fetch_response(response):
num = 1
for i in response:
print "Result:", num
for j in i['highlight']['attachment.content']:
print j
print "\n"
num+=1
答案 0 :(得分:0)
如果您将段落存储为nested或child文档,则可以使用inner-hits feature。
来自文档:
{
"query" : {
"nested" : {
"path" : "attachment",
"query_string": {
"default_field": "attachment.content",
"query": query_input
}
"inner_hits" : {}
}
}
}
然后,响应将在返回的每个文档中包含一个名为inner_hits
的字段,其中包含返回的每个文档的匹配段落。
此方法仍会将文档作为主要搜索结果返回。如果你想搜索段落,我的建议是将它们作为一个单独的类型索引。