8

Tôi đang sử dụng elasticsearch để lọc và tìm kiếm từ tệp json và tôi là người mới trong công nghệ này. Vì vậy, tôi hơi bối rối làm thế nào để viết như truy vấn trong elasticsearch.Giống như tìm kiếm trong Elasticsearch

select * from table_name where 'field_name' like 'a%' 

Đây là truy vấn mysql. Làm cách nào để viết truy vấn này trong Elasticsearch? Tôi đang sử dụng phiên bản elasticsearch 0.90.7.

+0

0.90.7 là phiên bản ES (rất) cũ. Tôi khuyên bạn nên sử dụng bản phát hành mới nhất. –

+1

Ngoài ra, vui lòng đọc [tài liệu] (https://www.elastic.co/guide/en/elasticsearch/guide/current/partial-matching.html)! Nó bao gồm nhiều trường hợp sử dụng và cung cấp các giải pháp khác nhau cho những gì bạn cần. –

Trả lời

16

tôi sẽ đánh giá cao đề nghị cập nhật phiên bản ElasticSearch bạn nếu có thể, đã có những thay đổi đáng kể kể từ 0.9.x.

Câu hỏi này không đủ cụ thể, vì có nhiều cách mà ElasticSearch có thể thực hiện chức năng này và chúng hơi khác một chút so với mục tiêu tổng thể của bạn. Nếu bạn đang tìm cách tái tạo truy vấn SQL chính xác thì trong trường hợp này, hãy sử dụng truy vấn tiền tố hoặc truy vấn tiền tố.

Sử dụng một truy vấn wildcard:

Lưu ý: Hãy cẩn thận với các tìm kiếm ký tự đại diện, họ là chậm. Tránh sử dụng các ký tự đại diện ở đầu chuỗi của bạn.

GET /my_index/table_name/_search 
{ 
    "query": { 
     "wildcard": { 
      "field_name": "a*" 
     } 
    } 
} 

Hoặc Prefix query

GET /my_index/table_name/_search 
{ 
    "query": { 
     "prefix": { 
      "field_name": "a" 
     } 
    } 
} 

Hoặc partial matching:

Lưu ý: Bạn KHÔNG một cách mù quáng sử dụng phù hợp với từng phần, trong khi có những trường hợp góc cho nó sử dụng, sử dụng đúng máy phân tích hầu như luôn luôn tốt hơn.

Truy vấn chính xác này sẽ tương đương với LIKE '%a%', một lần nữa, có thể thiết lập tốt hơn với việc sử dụng ánh xạ chính xác và tìm kiếm truy vấn thông thường!

GET /my_index/table_name/_search 
{ 
    "query": { 
     "match_phrase": { 
      "field_name": "a" 
     } 
    } 
} 

Nếu bạn đang đọc này tự hỏi về truy vấn ES tương tự cho tìm kiếm-as-you-type tôi sẽ khuyên bạn nên đọc lên trên edge-ngrams, mà liên quan đến sử dụng hợp lý bản đồ tùy thuộc vào những gì bạn đang cố gắng để làm =)

1
GET /indexName/table_name/_search 
{ 
    "query": { 
     "match_phrase": { 
      "field_name": "your partial text" 
     } 
    } 
} 

Bạn có thể sử dụng "type" : "phrase_prefix" tiền tố hoặc bưu điện sửa chữa bạn tìm kiếm mã Java cho cùng:

AndFilterBuilder andFilterBuilder = FilterBuilders.andFilter(); 
andFilterBuilder.add(FilterBuilders.queryFilter(QueryBuilders.matchPhraseQuery("field_name", 
      "your partial text"))); 

Gave 'và lọc' dụ để bạn có thể thêm các bộ lọc thêm nếu bạn muốn. Kiểm tra này cho biết thêm chi tiết:

https://www.elastic.co/guide/en/elasticsearch/guide/current/slop.html

+0

lý do tại sao các downvote? Bạn đang tìm kiếm cái gì –

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