2015-05-20 27 views
8

Tôi mới sử dụng ES. Tôi gặp khó khăn trong việc tìm kiếm các kết hợp cụm từ chính xác.tìm kiếm đàn hồi đối sánh cụm từ chính xác

Giả sử chỉ mục của tôi có trường được gọi là movie_name. Giả sử tôi có 3 tài liệu với các giá trị sau

  1. MOVIE_NAME = Mad Max
  2. MOVIE_NAME = max điên
  3. MOVIE_NAME = điên 3d max

Nếu truy vấn tìm kiếm của tôi là Mad Max, Tôi muốn 2 tài liệu đầu tiên được trả lại nhưng không phải là tài liệu thứ 3.

Nếu tôi thực hiện giải pháp "không được phân tích", tôi sẽ chỉ nhận được tài liệu 1 nhưng không phải là 2.

Tôi đang thiếu gì?

Trả lời

0

Sử dụng Phrase matching như thế này:

{ 
"query": { 
    "match_phrase": { 
     "movie_name": "a" 
    } 
} 
} 
+0

Tôi đã thử điều này nhưng điều này vẫn mang lại "3d tối đa điên". Như tài liệu nói "nhưng chỉ giữ tài liệu có chứa tất cả các cụm từ tìm kiếm" trong trường hợp của tôi, cả hai thuật ngữ được tìm thấy trong "mad max 3d". – userab12345

+0

là movie_name một trường được phân tích? vì thực tế truy vấn phải phù hợp với trường hợp trên và xuống có thể được giải quyết bằng cách phân tích trường –

+0

có, nó phân tích. – userab12345

4

tôi đã có thể làm điều đó bằng cách sử dụng lệnh sau đây, về cơ bản tạo ra một phân tích tùy chỉnh, sử dụng tokenizer từ khóa để ngăn chặn tokenization. Sau đó, sử dụng trình phân tích trong "ánh xạ" cho trường mong muốn, trong trường hợp này là "movie_name".

 

     PUT /movie 
     { 
     "settings":{ 
     "index":{ 
      "analysis":{ 
       "analyzer":{ 
        "keylower":{ 
        "tokenizer":"keyword", 
        "filter":"lowercase" 
        } 
       } 
      } 
     } 
     }, 
     "mappings" : { 
      "search" : { 
       "properties" : { 
        "movie_name" : { "type" : "string", "analyzer":"keylower" } 
       } 
      } 
     } 
    } 

Các vấn đề liên quan