ElasticSearch查询和OR

时间:2014-08-05 03:20:25

标签: java elasticsearch nosql

这是我的映射

{
  "app" : {
    "mappings" : {
      "patient" : {
        "properties" : {
          "LastName" : {
            "type" : "string"
          },
          "consultations" : {
            "type" : "nested",
            "properties" : {
              "deleted" : {
                "type" : "boolean"
              },
              "diagnosis" : {
                "type" : "string"
              },
              "documentDate" : {
                "type" : "date",
                "format" : "dateOptionalTime"
              },
              "firstName" : {
                "type" : "string"
              },
              "lastName" : {
                "type" : "string"
              },
              "middleName" : {
                "type" : "string"
              },
              "prescriptions" : {
                "type" : "string"
              }
            }
          },
          "firstName" : {
            "type" : "string"
          },
          "gender" : {
            "type" : "string"
          },
          "id" : {
            "type" : "string",
            "index" : "not_analyzed"
          },
          "lastName" : {
            "type" : "string"
          },
          "middleName" : {
            "type" : "string"
          },
          "owner" : {
            "type" : "string",
            "index" : "not_analyzed"
          },
          "patientPin" : {
            "type" : "string"
          }
        }
      }
    }
  }
}

Then let's say I have this data


{
   "id":"21",
   "firstName":"Scrappy",
   "patientPin":"2012010000000021",
   "middleName":"D",
   "consultations":[
      {
         "id":null,
         "prescriptions":[
            "GADOTERIC Acid DOTAREM"
         ],
         "diagnosis":[
            "Kawasaki's Disease",
            "Alcohol Intoxication"
         ],
         "documentDate":"2014-07-31T13:19:00.000+08:00",
         "deleted":false,
         "lastName":"Doo",
         "firstName":"Scrappy",
         "middleName":"D"
      }
   ],
   "owner":"TENANT1",
   "gender":"FEMALE",
   "lastName":"Doo"
}

{
   "id":"100066",
   "firstName":"Kyel ",
   "patientPin":"201408000001",
   "middleName":"John ",
   "consultations":[
      {
         "id":null,
         "prescriptions":[

         ],
         "diagnosis":[
            "headache"
         ],
         "documentDate":"2014-08-05T10:10:00.000+08:00",
         "deleted":false,
         "lastName":"David",
         "firstName":"Mika",
         "middleName":"John "
      }
   ],
   "owner":"TENANT1",
   "gender":"MALE",
   "lastName":"David"
}

如何查询有“头痛”或“酒精中毒”咨询的患者?

1 个答案:

答案 0 :(得分:0)

对于您的结果,我建议您使用过滤器。

您可以使用

实现此目的

对于或,术语过滤匹配文档与任何提供的值(表示是或为值)

client.prepareSearch("app").setTypes("patient").setPostFilter(
                FilterBuilders.termsFilter("consultations.diagnosis","headache","Alcohol Intoxication")
        );

For和,

client.prepareSearch("app").setTypes("patient").setPostFilter(
        FilterBuilders.andFilter(
                FilterBuilders.termsFilter("consultations.diagnosis","headache"),
                FilterBuilders.termsFilter("consultations.diagnosis","Alcohol Intoxication")
        )
);

为此,您要筛选的任何值都应为index:not_analyzed。 尝试学习elasticsearch