2013-06-07 19 views
5

Tôi có một truy vấn elasticsearch mà tôi đang cố gắng để phù hợp đúng cách, các dữ liệu lĩnh vực chính nó chứa - (dấu gạch ngang), dữ liệu chuỗi là GUIDSphù hợp với toàn bộ chuỗi với dấu gạch ngang trong elasticsearch

Nó không phù hợp với đúng vì đó là tách thuật ngữ lên thành các từ riêng biệt tách bởi -

tôi đã thay đổi kể từ truy vấn để sử dụng một truy vấn match_phrase như thế này:

"query": { 
    "filtered": { 
      "query": { 
       "match_phrase":{ 

        "guid":{"operator" : "or","query":"bd2acb42-cf01-11e2-ba92-12313916f4be"} 
       } 
      } 
    } 
} 

Khi tôi đang cố gắng để phù hợp với chỉ một GUIDS, điều này chỉ hoạt động tốt .

Tuy nhiên tôi đang cố gắng để phù hợp với nhiều GUIDS

Vì vậy, nó hiện trông giống như

"query": { 
    "filtered": { 
      "query": { 
       "match_phrase":{ 

        "guid":{"operator" : "or","query":"bd2acb42-cf01-11e2-ba92-12313916f4be d1091f08-ceff-11e2-ba92-12313916f4be"} 
       } 
      } 
    } 
} 

tôi giả sử nó không làm việc vì cố gắng của mình để phù hợp với toàn bộ chuỗi, và không phải mỗi GUID riêng.

Tôi đã thử thêm "trình phân tích": "khoảng trắng", vào truy vấn, nhưng điều này đã phá vỡ hoàn toàn truy vấn.

Vậy phương pháp nào tốt nhất để đảm bảo truy vấn đang tìm kiếm toàn bộ chuỗi GUID và cho phép kết hợp nhiều GUID?

Trả lời

4

Tôi đã đặt ánh xạ trường thành not_analyzed cho các mục đích tương tự.

"guid" : { 
     "type" : "string", 
     "index" : "not_analyzed" 
    } 

Xây dựng truy vấn theo cách thủ công rồi hoạt động.

{ 
    "bool" : { 
     "should" : [ 
      { 
       "term" : { "guid" : "bd2acb42-cf01-11e2-ba92-12313916f4be" } 
      }, 
      { 
       "term" : { "guid" : "d1091f08-ceff-11e2-ba92-12313916f4be" } 
      } 
     ], 
     "minimum_number_should_match" : 1 
    } 
} 
Các vấn đề liên quan