2013-07-17 25 views
6

Làm cách nào để tìm kiếm đàn hồi hoạt động để giải quyết trường hợp sử dụng tự động hoàn thành đơn giản có nhiều từ?truy vấn tiền tố elasticsearch cho nhiều từ để giải quyết trường hợp sử dụng tự động hoàn thành

Cho phép nói rằng tôi có tài liệu với tiêu đề sau - Tìm kiếm đàn hồi là một công cụ tìm kiếm tuyệt vời được xây dựng trên đầu trang của lucene.

Vì vậy, nếu tôi sử dụng truy vấn tiền tố và xây dựng nó với hình thức -

{ 
    "prefix" : { "title" : "Elas" } 
} 

Nó sẽ trả lại tài liệu mà trong tập kết quả.

Tuy nhiên nếu tôi thực hiện tìm kiếm tiền tố cho

{ 
    "prefix" : { "title" : "Elastic sea" } 
} 

tôi nhận được không có kết quả.

Tôi cần phải tạo loại truy vấn nào để trình bày cho người dùng kết quả cho trường hợp sử dụng tự động hoàn tất đơn giản.

Trả lời

2

Để đạt được kết quả đó, bạn sẽ cần sử dụng truy vấn Boolean. Từ một phần cần phải là truy vấn tiền tố và từ hoặc cụm từ hoàn chỉnh cần phải nằm trong mệnh đề đối sánh. Có các chỉnh sửa khác có sẵn cho truy vấn như phải vv .. có thể được áp dụng khi cần.

{ 
    "query": { 
     "bool": { 
      "must": [ 
       { 
        "prefix": { 
         "name": "sea" 
        } 
       }, 
       { 
        "match": { 
         "name": "elastic" 
        } 
       } 
      ] 
     } 
    } 
} 
9

Truy vấn tiền tố được thực hiện trên Elastic sea sẽ phù hợp với một thuật ngữ như Elastic search trong chỉ mục, nhưng điều đó không xuất hiện trong chỉ số của bạn nếu bạn tokenize vào khoảng trắng. Những gì bạn có là elasticsearch là hai mã thông báo khác nhau. Hãy xem analyze api để tìm hiểu cách bạn đang thực sự lập chỉ mục văn bản của mình.

Sử dụng truy vấn boolean như trong câu trả lời của bạn, bạn sẽ không tính đến vị trí của các cụm từ. Bạn sẽ nhận được kết quả là các tài liệu sau đây ví dụ:

đàn hồi mô hình là một khuôn khổ để lưu trữ đối tượng Moose bạn và tìm kiếm qua chúng.

Để tự động hoàn thành, bạn có thể muốn thực hiện truy vấn cụm từ và sử dụng thuật ngữ cuối làm tiền tố. Đó là sẵn ra khỏi hộp bằng cách sử dụng loại match_phrase_prefix trong một match query, được tạo sẵn một cách chính xác cho usecase của bạn:

{ 
    "match" : { 
     "message" : { 
      "query" : "elastic sea", 
      "type" : "phrase_prefix" 
     } 
    } 
} 

Với truy vấn này tài liệu ví dụ của bạn sẽ phù hợp nhưng tôi sẽ không từ elastic là không gần search đó.

+0

Tôi nên làm rõ và đây là lỗi của tôi. Vị trí của các thuật ngữ không quan trọng đối với tôi vì tôi chỉ xem xét các tiêu đề và không chống lại toàn bộ mô tả. Truy vấn phrase_prefix sẽ không mang lại kết quả nếu tôi tìm kiếm Elastic Moos trong ví dụ của bạn? – user1796571

+0

Không, không! Truy vấn tôi đề xuất sẽ tính đến vị trí của các cụm từ và chỉ mở rộng truy vấn cuối cùng để xử lý nó dưới dạng tiền tố. – javanna

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