Tìm kiếm đàn hồi: cách xem dữ liệu được lập chỉ mục


102

Tôi đã gặp sự cố với ElasticSearch và Rails, trong đó một số dữ liệu không được lập chỉ mục chính xác do attr_protected. Elastic Search lưu trữ dữ liệu đã lập chỉ mục ở đâu? Sẽ rất hữu ích nếu bạn kiểm tra xem dữ liệu được lập chỉ mục thực tế có sai hay không.

Kiểm tra ánh xạ với Tire.index('models').mappingkhông giúp được gì, trường được liệt kê.

Câu trả lời:


170

Có lẽ cách dễ dàng nhất để khám phá cụm ElasticSearch của bạn là sử dụng phần đầu tìm kiếm đàn hồi .

Bạn có thể cài đặt nó bằng cách:

cd elasticsearch/
./bin/plugin -install mobz/elasticsearch-head

Sau đó (giả sử ElasticSearch đã chạy trên máy cục bộ của bạn), hãy mở cửa sổ trình duyệt để:

http://localhost:9200/_plugin/head/

Ngoài ra, bạn có thể chỉ sử dụng curltừ dòng lệnh, ví dụ:

Kiểm tra ánh xạ để tìm chỉ mục:

curl -XGET 'http://127.0.0.1:9200/my_index/_mapping?pretty=1' 

Nhận một số tài liệu mẫu:

curl -XGET 'http://127.0.0.1:9200/my_index/_search?pretty=1' 

Xem các điều khoản thực tế được lưu trữ trong một trường cụ thể (tức là cách trường đó đã được phân tích):

curl -XGET 'http://127.0.0.1:9200/my_index/_search?pretty=1'  -d '
 {
    "facets" : {
       "my_terms" : {
          "terms" : {
             "size" : 50,
             "field" : "foo"
          }
       }
    }
 }

Có thêm tại đây: http://www.elasticsearch.org/guide

CẬP NHẬT: Plugin Sense trong Marvel

Cho đến nay, cách dễ nhất để viết curlcác lệnh kiểu cho Elasticsearch là plugin Sense trong Marvel .

Nó đi kèm với tính năng làm nổi bật nguồn, thụt lề khá đẹp và tự động hoàn thành.

Lưu ý: Sense ban đầu là một plugin chrome độc ​​lập nhưng hiện là một phần của dự án Marvel .


1
Trong trường hợp như của Robin, tôi nghĩ chỉ cần kiểm tra dữ liệu bằng curl là đủ curl localhost:9200/my_index/_search?q=*&pretty- giả sử có một bộ tài liệu hạn chế trong chỉ mục.
karmi

2
Cảm ơn bạn đã giới thiệu plugin Sense. No trông tuyệt.
Venkatesh Nannan

Plugin Sense dành cho chrome rất tuyệt khi sử dụng API REST. và _head rất tốt cho mục đích kiểm tra!
Haywire


Cảm ơn điều này thực sự hữu ích. Btw cú pháp là ./bin/plugin cài đặt mobz /asticsearch-head. tức là bạn không cần gạch nối ở phía trước cài đặt.
Paul Bartlett

40

Cách dễ nhất để xem dữ liệu đã lập chỉ mục của bạn là xem nó trong trình duyệt của bạn. Không cần tải xuống hoặc cài đặt.

Tôi sẽ giả sử máy chủ tìm kiếm đàn hồi của bạn là http://127.0.0.1:9200.

Bước 1

Điều hướng đến http://127.0.0.1:9200/_cat/indices?vđể liệt kê các chỉ số của bạn. Bạn sẽ thấy một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

Bước 2

Thử truy cập chỉ mục mong muốn: http://127.0.0.1:9200/products_development_20160517164519304

Đầu ra sẽ giống như sau:

nhập mô tả hình ảnh ở đây

Lưu ý aliases, nghĩa là chúng ta cũng có thể truy cập chỉ mục tại: http://127.0.0.1:9200/products_development

Bước 3

Điều hướng đến http://127.0.0.1:9200/products_development/_search?prettyđể xem dữ liệu của bạn:

nhập mô tả hình ảnh ở đây


3
Cảm ơn Jan, đó chỉ là những gì tôi đang tìm kiếm.
ZedTuX

Tôi chỉ có một câu hỏi, không http://127.0.0.1:9200/products_development/_search?pretty=1chỉ hiển thị dữ liệu mẫu? nó dường như không hiển thị tất cả các dữ liệu
svelandiag

1
Các tài liệu ở đây nói rằng kết quả tìm kiếm mặc định đến 10 tài liệu đầu tiên (nhìn cho hits.hits)
Jan Klimo

8
Điều này hoàn toàn không hiển thị dữ liệu đã lập chỉ mục. Nó chỉ hiển thị dữ liệu nguồn của bạn — chính thứ mà bạn đưa vào. Không trả lời câu hỏi OPs.
hackel

1
? khá là đủ, không cần phải thêm "= 1"
Shai Alon


5

Giải pháp tổng hợp

Giải quyết vấn đề bằng cách nhóm dữ liệu - câu trả lời của DrTech đã sử dụng các khía cạnh để quản lý điều này nhưng sẽ không được chấp nhận theo tham chiếu Elasticsearch 1.0.

Warning

Facets are deprecated and will be removed in a future release. You are encouraged to
migrate to aggregations instead.

Các khía cạnh được thay thế bằng các tổng hợp - Được giới thiệu theo cách dễ tiếp cận trong Hướng dẫn Elasticsearch - giúp tải một ví dụ có ý nghĩa. .

Giải pháp ngắn gọn

Giải pháp là giống nhau ngoại trừ yêu cầu tổng hợp aggsthay vì facetsvà với số lượng 0 đặt giới hạn thành số nguyên tối đa - mã ví dụ yêu cầu Trình cắm Marvel

# Basic aggregation
GET /houses/occupier/_search?search_type=count
{
    "aggs" : {
        "indexed_occupier_names" : {    <= Whatever you want this to be
            "terms" : {
              "field" : "first_name",    <= Name of the field you want to aggregate
              "size" : 0
            }
        }
    }
}

Giải pháp đầy đủ

Đây là mã Sense để kiểm tra nó - ví dụ về chỉ mục nhà, với kiểu người ở và trường first_name:

DELETE /houses

# Index example docs
POST /houses/occupier/_bulk
{ "index": {}}
{ "first_name": "john" }
{ "index": {}}
{ "first_name": "john" }
{ "index": {}}
{ "first_name": "mark" }


# Basic aggregation
GET /houses/occupier/_search?search_type=count
{
    "aggs" : {
        "indexed_occupier_names" : {
            "terms" : {
              "field" : "first_name",
              "size" : 0
            }
        }
    }
}

Phản ứng

Phản hồi hiển thị mã tổng hợp có liên quan. Với hai chìa khóa trong chỉ mục, John và Mark.

    ....
    "aggregations": {
      "indexed_occupier_names": {
         "buckets": [
            {
               "key": "john",     
               "doc_count": 2     <= 2 documents matching
            },                        
            {
               "key": "mark",
               "doc_count": 1     <= 1 document matching
            }
         ]
      }
   }
   ....

4

Một công cụ giúp tôi rất nhiều để gỡ lỗi ElasticSearch là ElasticHQ . Về cơ bản, nó là một tệp HTML với một số JavaScript. Không cần cài đặt ở bất cứ đâu, hãy để một mình trong ES: chỉ cần tải xuống, giải nén int và mở tệp HTML bằng trình duyệt.

Không chắc nó là công cụ tốt nhất cho người dùng nặng ES. Tuy nhiên, nó thực sự thiết thực đối với những ai đang vội vàng để xem các mục nhập.



1

Theo ví dụ @JanKlimo, trên terminal tất cả những gì bạn phải làm là:

để xem tất cả các Chỉ mục: $ curl -XGET 'http://127.0.0.1:9200/_cat/indices?v'

để xem nội dung của Index products_development_20160517164519304: $ curl -XGET 'http://127.0.0.1:9200/products_development_20160517164519304/_search?pretty=1'


1

Kibana cũng là một giải pháp tốt. Nó là một nền tảng trực quan hóa dữ liệu cho Elastic, nếu được cài đặt nó sẽ chạy theo mặc định trên cổng 5601.

Trong số nhiều thứ nó cung cấp. Nó có "Công cụ phát triển", nơi chúng tôi có thể thực hiện gỡ lỗi của bạn.

Ví dụ: bạn có thể kiểm tra các chỉ mục có sẵn của mình tại đây bằng lệnh

GET /_cat/indices
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.