如何根据用户索引字段动态运行弹性搜索查询

2022-10-21 01:34:27 发布


我在弹性搜索中有一个索引,它包含8个字段

我想写一个包含当前查询中所有8个字段的查询

但有时用户只能从当前索引查询中搜索2、3、4个字段

虽然我尝试使用下面的查询来提供精确匹配的数据,但我不传递任何字段值,然后获取空值

我正在尝试根据以下sql查询条件搜索记录:-1: 条件:-01 我在当前索引用例中有8个字段,我想根据提供的值搜索所有字段的值,比如- 字段1:“数据” 字段2:'sata' 字段5:2424 字段8:PHM

条件02:- 在上面的搜索字段中,我没有提供字段3、4、6、7的字段值 但我们需要这个字段来在当前查询中进行下一次搜索,并希望得到与上一次搜索完全匹配的结果- 字段1:“数据” 字段2:'sata' 字段5:2424 字段8:'PHM'

条件3:-1: 当我使用--and--(在ES中匹配)条件 字段1:“数据” 字段2:'sata' 字段5:2424 字段8:PHM

--然后它将获取完全匹配的记录,但如果我们不传递任何字段的值,则此查询将失败

--如果我使用了--OR--(should in ES)条件,那么它将获取所有匹配的记录,其中所有字段在我的用例中都是错误的

最终请求:

我想--所有字段--在搜索查询中,但用户可以提供一些时间3,4,5字段只,但结果应该来根据提供的字段值

有关详细信息:-

非常感谢。 Hadoop帮助

"query": "select * from dbdataindex_join_allcolumns_qa_modify_cm_28_08_2019 where  regionname='MSP 05S' and caremanager='HM CM' and patientname='Aaron' "
}```

SAME QUERY in DSL:-
```<{ "size" : 1000, "query" : { "bool" : { "must" : [ { "bool" : { "must" : [ { "term" : { "regionname.keyword" : { "value" : "MS5S", "boost" : 1.0 } } }, { "term" : { "caremanager.keyword" : { "value" : "HECM", "boost" : 1.0 } } } ], "adjust_pure_negative" : true, "boost" : 1.0 } }, { "term" : { "patientname.keyword" : { "value" : "Aaa", "boost" : 1.0 } } } ], "adjust_pure_negative" : true, "boost" : 1.0 } }, "_source" : { "includes" : [ "@version", "active", "beneficiary_status", "care_program_name", "caremanager", "city", "dob1", "email", "medicare", "patientname", "pcp", "phone_home", "provider_type", "regionname", "sex" ], "excludes" : [ ] }, "docvalue_fields" : [ { "field" : "@timestamp", "format" : "epoch_millis" }, { "field" : "age" }, { "field" : "careprog_id" }, { "field" : "dob", "format" : "epoch_millis" }, { "field" : "log_date", "format" : "epoch_millis" }, { "field" : "patient_provider_hrk" }, { "field" : "pid" }, { "field" : "user_id" } ], "sort" : [ { "_doc" : { "order" : "asc" } } ] } />```


i am getting null value when applied must ?

Tags: and数据fieldvalue记录条件query段值boostmustphmregionnamesatapatientnamecaremanager