ไม่มี [ข้อความค้นหา] ที่ลงทะเบียนสำหรับ [กรอง]


108

ฉันมีคำถามที่ต้องการกรองผลลัพธ์ออกไป

นี่คือคำถามของฉัน

{
    "query": {
        "filtered": {
            "query": {
                "multi_match": {
                    "default_operator": "AND",
                    "fields": [
                        "author",
                        "title",
                        "publisher",
                        "year"
                    ],
                    "query": "George Orwell"
                }
            },
            "filter": {
                "terms": {
                    "year": [
                        1980,
                        1981
                    ]
                }
            }
        }
    }
}

no [query] registered for [filtered]ฉันได้รับข้อผิดพลาดว่า ฉันมีคำถามสำหรับฟิลด์ที่กรองอย่างชัดเจน ฉันกำลังทำตามรูปแบบที่ระบุในเอกสารการสืบค้นที่กรองแล้วในหน้า elasticsearch https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

คำตอบ:


185

filteredแบบสอบถามได้รับการคัดค้านและลบออกใน ES 5.0 ตอนนี้คุณควรใช้bool/must/filterแบบสอบถามแทน

{
    "query": {
        "bool": {
            "must": {
                "multi_match": {
                    "operator": "and",
                    "fields": [
                        "author",
                        "title",
                        "publisher",
                        "year"
                    ],
                    "query": "George Orwell"
                }
            },
            "filter": {
                "terms": {
                    "year": [
                        1980,
                        1981
                    ]
                }
            }
        }
    }
}

ความแตกต่างระหว่างสองคำค้นหามีดังนี้

3,4c3,4
<         "bool": {
<             "must": {
---
>         "filtered": {
>             "query": {
6c6
<                     "operator": "and",
---
>                     "default_operator": "AND",

ป.ล. : หน้าอ้างอิงที่คุณกำลังดูอยู่ใน "หน้าที่ถูกลบ" ของภาคผนวกดังนั้นจึงไม่ใช่ส่วนหนึ่งของเอกสารประกอบหลักอีกต่อไป


4
เมื่อใช้ 5.5 ดูเหมือนว่า default_operator จะถูกลบออกจากแบบสอบถาม multi_match ด้วยเช่นกันดังนั้นจึงอาจคุ้มค่าที่จะอัปเดตคำตอบนี้เนื่องจากทำให้ฉันไปตามถนนที่ไม่ถูกต้องโดยสมมติว่าข้างต้นจะใช้งานได้ฉันแก้ไขแบบสอบถามให้ตรงกับฟิลด์ของฉันเพื่อให้ตระหนักถึงมัน ไม่ได้ผล! มันเป็นการแก้ไขที่ง่ายสำหรับฉันแม้ว่า bu จะแค่ลบตัวดำเนินการเริ่มต้น แต่อาจคุ้มค่าที่จะแก้ไขสำหรับผู้อ่านในอนาคตข้อผิดพลาดคือ: แบบสอบถาม [multi_match] ไม่รองรับ [default_operator]
Birdy

3
@Birdy มีการตั้งชื่อพารามิเตอร์operatorและไม่ใช่default_operatorฉันได้แก้ไขคำตอบขอโทษด้วย
วาล

วัล - ถ้าคุณมีเวลาสักครู่โปรดช่วยฉันแก้ปัญหาเกี่ยวกับล็อกสแตชฉันล้มตัวลงจากโต๊ะนานกว่า 48 ชั่วโมงฮ่าฮ่าและฉันรู้ว่าคุณเป็นผู้เชี่ยวชาญในสาขาที่สามารถช่วยประหยัดวันได้ฮ่าฮ่า ขอบคุณฉันจะเป็นหนี้ตลอดไปถ้าคุณทำได้ !! stackoverflow.com/questions/45577572/…
เบอร์ดี้

ขอบคุณสิ่งนี้ใช้ได้ผลสำหรับฉันเมื่ออัปเกรดอินสแตนซ์ ES5.1 เป็น 7.1
jhob101
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.