Elasticsearch - 返回结果每次点击'而不是文件

时间:2017-04-27 09:45:54

标签: python elasticsearch

我是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

1 个答案:

答案 0 :(得分:0)

如果您将段落存储为nestedchild文档,则可以使用inner-hits feature

来自文档:

{
  "query" : {
    "nested" : {
      "path" : "attachment",
        "query_string": {
          "default_field": "attachment.content",
          "query": query_input
         }
         "inner_hits" : {} 
       }
     }
}

然后,响应将在返回的每个文档中包含一个名为inner_hits的字段,其中包含返回的每个文档的匹配段落。

此方法仍会将文档作为主要搜索结果返回。如果你想搜索段落,我的建议是将它们作为一个单独的类型索引。