弹性搜索查询
Elastic search querying
我的弹性搜索查询有一些问题。我有以下字段,patientid、patientfirstname、patientmidname 和 patientlastname。我希望能够输入这 4 个字段中的任何一个并返回匹配结果。到目前为止,我的查询只有在我使用 patientid 时才有效。如果我输入类似 harry (firstname) 或 middle/last name 的内容,它不会查询它。单独的术语查询适用于它们中的每一个。
q = Q({"bool": { "should": [ {"term":{"patientid":text}}, {"wildcard":{"patientlastname":"*"+text+"*"}}, {"wildcard":{"patientfirstname":"*"+text+"*"}}, {"wildcard":{"patientmidname":"*"+text+"*"}} ]}})
r = Search().query(q)[0:10000]
匹配取决于你的分析仪,我推荐的是只使用:
Search().query('multi_match', query=text, fields=['patientid', 'patientlastname', 'patientfirstname', 'patientmidname'])
这将跨这些字段进行查询(您可以在 [0] 中阅读 multi_match
查询的不同 type
)。
您只需确保正确分析所有患者姓名字段(有关详细信息,请参阅 [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
我的弹性搜索查询有一些问题。我有以下字段,patientid、patientfirstname、patientmidname 和 patientlastname。我希望能够输入这 4 个字段中的任何一个并返回匹配结果。到目前为止,我的查询只有在我使用 patientid 时才有效。如果我输入类似 harry (firstname) 或 middle/last name 的内容,它不会查询它。单独的术语查询适用于它们中的每一个。
q = Q({"bool": { "should": [ {"term":{"patientid":text}}, {"wildcard":{"patientlastname":"*"+text+"*"}}, {"wildcard":{"patientfirstname":"*"+text+"*"}}, {"wildcard":{"patientmidname":"*"+text+"*"}} ]}})
r = Search().query(q)[0:10000]
匹配取决于你的分析仪,我推荐的是只使用:
Search().query('multi_match', query=text, fields=['patientid', 'patientlastname', 'patientfirstname', 'patientmidname'])
这将跨这些字段进行查询(您可以在 [0] 中阅读 multi_match
查询的不同 type
)。
您只需确保正确分析所有患者姓名字段(有关详细信息,请参阅 [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