ค้นหาด้วยหลายค่าในคุณสมบัติที่มีค่าเดียวใน Elasticsearch

ฉันกำลังพยายามสร้างแบบสอบถามนี้สักหน่อย ดัชนีที่ฉันกำลังค้นหายังมีฟิลด์ "เอนทิตี" พร้อมรหัสด้วย ดังนั้นบันทึกบางส่วนจะมี "เอนทิตี" : 16, "เอนทิตี" 156 ฯลฯ ขึ้นอยู่กับรหัสของเอนทิตี ฉันต้องขยายการสืบค้นนี้ในลักษณะที่สามารถส่งผ่านอาร์เรย์หรือรายการค่าบางค่าได้ เช่น {:term => {:entity => [1, 16, 100]}} และรับกลับบันทึกที่มี หนึ่งในจำนวนเต็มเหล่านี้เป็นค่าเอนทิตี ฉันไม่มีโชคเลย ใครก็ได้ช่วยฉันหน่อยได้ไหม?

{ 
  "query" : {

    "bool" : {
      "must" : [
        {
          "term" : {"user_type" : "alpha"}
        }, 
        { 
          "term" :{"area" : "16"}
        }
      ], 
      "must_not" : [], 
      "should" :   []
    }
  }, 
  "filter": {
    "or" : [{
       "and" : [
          { "term" : { "area" : "16" } },
          { "term" : { "date" : "05072013" } }
       ]
    }, {
       "and" : [
          { "term" : { "area" : "16" } },
          { "term" : { "date" : "blank" } }
       ]
    }


    ]
  },
"from" : 0,
"size" : 100 
}

person Aristata    schedule 27.04.2013    source แหล่งที่มา


คำตอบ (1)


ใช้ "terms" แทน "term"

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-filter.html https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html

{ "terms" : { "entity" : [ 123, 1234, ... ] }}

person mbj    schedule 27.04.2013
comment
ขอบคุณมาก! คุณบันทึกวันของฉัน :) - person NorthCat; 14.12.2015
comment
แบบสอบถามนี้จะติดต่อกับ AND หรือกับ OR ? ฉันต้องการตรวจสอบสภาพของฉันด้วย OR like: ในแบบสอบถามด้านบน เอนทิตี=123 OR เอนทิตี=1234 เป็นต้น จะเขียนแบบสอบถามนั้นได้อย่างไร? - person David Coder; 31.03.2016
comment
@DeepParekh คุณสามารถเขียนแบบสอบถามสำหรับความคิดเห็นข้างต้นได้หรือไม่? และหรือหรือ? ฉันมีบางอย่างเช่นนี้ (ฉันต้องส่งส่วนขยายหลายค่าเพื่อกรอง คุณช่วยฉันแก้ปัญหานี้ได้ไหม) ตอนนี้ฉันสามารถส่งส่วนขยายได้เพียงค่าเดียวเท่านั้น จะเกิดอะไรขึ้นหากฉันต้องส่งค่าส่วนขยายหลายค่าสำหรับการสืบค้นตัวกรอง .Filter(ft => ft.Term(t => t.Field("content_type").Value(extension))))) - person ASN; 20.06.2016