弹性搜索:如何查看索引数据

时间:2012-01-21 16:52:58

标签: ruby-on-rails elasticsearch attr-protected

我遇到了ElasticSearch和Rails的问题,由于attr_protected,一些数据没有正确编入索引。 Elastic Search在哪里存储索引数据?检查实际的索引数据是否错误会很有用。

使用Tire.index('models').mapping检查映射无效,列出了该字段。

8 个答案:

答案 0 :(得分:164)

探索ElasticSearch集群的最简单方法可能是使用elasticsearch-head

您可以通过执行以下操作来安装它:

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

然后(假设ElasticSearch已在您的本地计算机上运行),打开浏览器窗口:

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

或者,您可以从命令行使用curl,例如:

检查索引的映射:

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

获取一些示例文档:

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

查看存储在特定字段中的实际术语(即如何分析该字段):

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

此处提供更多信息:http://www.elasticsearch.org/guide

更新:Marvel

中的Sense插件

到目前为止,为{Elasticsearch'编写curl - 样式命令的最简单方法是Sense plugin in Marvel

它带有源突出显示,非常缩进和自动完成。

注意:Sense was originally a standalone chrome plugin but is now part of the Marvel project

答案 1 :(得分:31)

查看索引数据的最简单方法是在浏览器中查看它。 无需下载或安装。

我将假设您的弹性搜索主机为http://127.0.0.1:9200

第1步

导航至http://127.0.0.1:9200/_cat/indices?v以列出您的索引。你会看到这样的事情:

enter image description here

第2步

尝试访问所需的索引: http://127.0.0.1:9200/products_development_20160517164519304

输出看起来像这样:

enter image description here

注意aliases,这意味着我们也可以在以下位置访问索引: http://127.0.0.1:9200/products_development

第3步

导航至http://127.0.0.1:9200/products_development/_search?pretty=1以查看您的数据:

enter image description here

答案 2 :(得分:10)

ElasticSearch data browser

搜索,图表,一键设置......

答案 3 :(得分:5)

聚合解决方案

通过对数据进行分组来解决问题 - DrTech的答案在管理此问题时使用了方面,但will be deprecated according to Elasticsearch 1.0 reference.

Warning

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

分面由聚合替换 - Introduced in an accessible manner in the Elasticsearch Guide - which loads an example into sense.

简短解决方案

除了汇总需要aggs而不是facets以及count of 0 which sets limit to max integer - the example code requires the Marvel Plugin

之外,解决方案是相同的
# 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
            }
        }
    }
}

完整解决方案

以下是测试它的Sense代码 - 房屋索引的示例,占用者类型和字段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
            }
        }
    }
}

响应

显示相关聚合代码的响应。索引中有两个键,John和Mark。

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

答案 4 :(得分:4)

帮助我调试ElasticSearch的工具是ElasticHQ。基本上,它是一个带有一些JavaScript的HTML文件。无需在任何地方安装,更不用说在ES本身:只需下载它,解压缩int并使用浏览器打开HTML文件。

不确定它是ES重度用户的最佳工具。然而,对于急于看到参赛作品的人来说,这是非常实际的。

答案 5 :(得分:1)

如果您使用的是谷歌浏览器,那么您只需使用名为Sense的扩展名,如果您使用漫威,它也是一种工具。

https://chrome.google.com/webstore/detail/sense-beta/lhjgkmllcaadmopgmanpapmpjgmfcfig

答案 6 :(得分:1)

关注@JanKlimo示例,在终端上您所要做的就是:

查看所有指数: $ curl -XGET 'http://127.0.0.1:9200/_cat/indices?v'

查看索引products_development_20160517164519304的内容: $ curl -XGET 'http://127.0.0.1:9200/products_development_20160517164519304/_search?pretty=1'

答案 7 :(得分:0)

Kibana也是一个很好的解决方案。这是Elastic的数据可视化平台。如果已安装,则默认在端口5601上运行。

它提供的许多东西中。它具有“开发工具”,我们可以在其中进行调试。

例如,您可以使用命令

在此处检查可用索引
::ng-deep .dropdown-menu { width: 100%; }