弹性搜索查询

时间:2018-08-22 18:35:39

标签: django elasticsearch elasticsearch-dsl

我的弹性搜索查询遇到一些问题。我有以下字段,Patientid,Patientfirstname,Patientmidname和Patientlastname。我希望能够在这4个字段之一中输入并获得匹配的结果。到目前为止,仅当我使用Patientid时,查询才有效。如果我键入“哈利”(名字)或中间名/姓氏之类的信息,则不会查询它。单个词条查询适用于每个词条。

q = Q({"bool": { "should": [ {"term":{"patientid":text}}, {"wildcard":{"patientlastname":"*"+text+"*"}}, {"wildcard":{"patientfirstname":"*"+text+"*"}}, {"wildcard":{"patientmidname":"*"+text+"*"}} ]}})

r = Search().query(q)[0:10000]

1 个答案:

答案 0 :(得分:1)

匹配项取决于您的分析仪,我建议仅使用:

Search().query('multi_match', query=text, fields=['patientid', 'patientlastname', 'patientfirstname', 'patientmidname'])

将在这些字段中进行查询(您可以在[0]中了解type查询中不同的multi_match条信息。

您只需要确保正确分析了所有患者姓名字段(有关详细信息,请参见[1])

0-https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html 1-https://www.elastic.co/guide/en/elasticsearch/reference/6.4/analysis.html#_index_time_analysis