<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Elasticsearch on kamuszhou&#39;s blog</title>
    <link>https://ykyi.net/tags/elasticsearch/</link>
    <description>Recent content in Elasticsearch on kamuszhou&#39;s blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 25 Aug 2017 03:32:09 +0000</lastBuildDate>
    <atom:link href="https://ykyi.net/tags/elasticsearch/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>访问ES最简单示例</title>
      <link>https://ykyi.net/?p=1388/</link>
      <pubDate>Fri, 25 Aug 2017 03:32:09 +0000</pubDate>
      <guid>https://ykyi.net/?p=1388/</guid>
      <description>&lt;p&gt;这些天架了一个ES集群，用来分析积累了海量日志数据。我用sphinx写了一个简单文档，发布在内网。下面是复制过来的部分内容，不幸的是很多格式信息都丢失了。做了点简单修改，去掉了敏感信息。&lt;/p&gt;
&lt;p&gt;///////////////////////////////////////////////////////////&lt;/p&gt;
&lt;p&gt;本示例仅示范最为基础的应用，协助读者调通最简单的查询。 详细灵活的使用方法非本文档能够覆盖，需参见官方详细文档或咨询你常用的搜索引擎。&lt;/p&gt;
&lt;ol class=&#34;arabic simple&#34;&gt;
  &lt;li&gt;
    使用&lt;span class=&#34;highlighted&#34;&gt;curl&lt;/span&gt;命令行工具
  &lt;/li&gt;
  &lt;li&gt;
    使用es官方python库 &lt;ol class=&#34;arabic&#34;&gt;
      &lt;li&gt;
        RESTful接口
      &lt;/li&gt;
      &lt;li&gt;
        官方python库
      &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&#34;curl&#34; class=&#34;section&#34;&gt;
  &lt;h2&gt;
    使用&lt;span class=&#34;highlighted&#34;&gt;curl&lt;/span&gt;命令行工具
  &lt;/h2&gt;
  &lt;div class=&#34;line-block&#34;&gt;
    &lt;div class=&#34;line&#34;&gt;
      NOTICE:
    &lt;/div&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&amp;quot;line&amp;quot;&amp;gt;
  [*略去较为敏感的鉴权部分*]
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
  &lt;div class=&#34;line-block&#34;&gt;
  &lt;/div&gt;
  &lt;ul class=&#34;simple&#34;&gt;
    &lt;li&gt;
      在访问日志中检索一个keyword，无论keyword出现在哪个字段中。 如下示例：所有文档，superuser出现在其中任意字段中都会被召回。注意酌情更换URI中的参数。 实际上，把_all替换成user_name，则只在user_name字段中检索。这里使用的是lucene语法， 参见：&lt;a class=&#34;reference external&#34; href=&#34;https://lucene.apache.org/core/2_9_4/queryparsersyntax.html&#34;&gt;https://lucene.apache.org/core/2_9_4/queryparsersyntax.html&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
  &lt;div class=&#34;highlight-bash&#34;&gt;
    &lt;table class=&#34;highlighttable&#34;&gt;
      &lt;tr&gt;
        &lt;td class=&#34;linenos&#34;&gt;
          &lt;div class=&#34;linenodiv&#34;&gt;
            &lt;pre&gt;1&lt;/pre&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;code&#34;&gt;
  &lt;div class=&#34;highlight&#34;&gt;
    &lt;pre&gt;&lt;span class=&#34;highlighted&#34;&gt;curl&lt;/span&gt; https://endpoint/_search?q&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;_all:superuser
&lt;/pre&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;ul class=&#34;simple&#34;&gt;
  &lt;li&gt;
    使用ES的DSL语法，在访问日志中检索出现在指定字段中的keyword。 如下示例：superuser出现在user_name字段中。
  &lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight-bash&#34;&gt;
  &lt;table class=&#34;highlighttable&#34;&gt;
    &lt;tr&gt;
      &lt;td class=&#34;linenos&#34;&gt;
        &lt;div class=&#34;linenodiv&#34;&gt;
          &lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10&lt;/pre&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;code&#34;&gt;
  &lt;div class=&#34;highlight&#34;&gt;
    &lt;pre&gt;&lt;span class=&#34;highlighted&#34;&gt;curl&lt;/span&gt; https://endpoint/_search?pretty -H &lt;span class=&#34;s2&#34;&gt;&#34;Content-Type: application/json&#34;&lt;/span&gt; -X POST -d &lt;span class=&#34;s1&#34;&gt;&#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;   &#34;query&#34;:{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;       &#34;bool&#34;:{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;             &#34;filter&#34;:[&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                 { &#34;term&#34;:{ &#34;user_name&#34;: &#34;superuser&#34; } }&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;             ]&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;       }&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;   }&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;}&#39;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;
  上述检索方法使用了ES中的filter语法，filter是较快的一种查询方式。如果需要检索的字段需要分词，则只能使用 match语法，如下：
&lt;/p&gt;
&lt;div class=&#34;highlight-bash&#34;&gt;
  &lt;table class=&#34;highlighttable&#34;&gt;
    &lt;tr&gt;
      &lt;td class=&#34;linenos&#34;&gt;
        &lt;div class=&#34;linenodiv&#34;&gt;
          &lt;pre&gt;1
2
3
4
5
6
7
8&lt;/pre&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;code&#34;&gt;
  &lt;div class=&#34;highlight&#34;&gt;
    &lt;pre&gt;&lt;span class=&#34;highlighted&#34;&gt;curl&lt;/span&gt; ./kamus.key https://endpoint/_search?pretty -H &lt;span class=&#34;s2&#34;&gt;&#34;Content-Type: application/json&#34;&lt;/span&gt; -X POST -d &lt;span class=&#34;s1&#34;&gt;&#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;   &#34;query&#34;:{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;       &#34;match&#34;:{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;             {&#34;user_name&#34;: &#34;superuser&#34;}&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;       }&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;   }&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;}&#39;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;ul class=&#34;simple&#34;&gt;
  &lt;li&gt;
    为检索增加时间限制 如需要指定时间区间：
  &lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight-bash&#34;&gt;
  &lt;table class=&#34;highlighttable&#34;&gt;
    &lt;tr&gt;
      &lt;td class=&#34;linenos&#34;&gt;
        &lt;div class=&#34;linenodiv&#34;&gt;
          &lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20&lt;/pre&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;code&#34;&gt;
  &lt;div class=&#34;highlight&#34;&gt;
    &lt;pre&gt;&lt;span class=&#34;highlighted&#34;&gt;curl&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&#34;https://endpoint/_search?pretty&#34;&lt;/span&gt; -d &lt;span class=&#34;s1&#34;&gt;&#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;  &#34;query&#34;:{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;       &#34;bool&#34;:{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;               &#34;must&#34;:{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                    &#34;match&#34;:{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                                &#34;user_name&#34;:&#34;superuser&#34;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                            }&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;               },&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;               &#34;filter&#34;:{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                     &#34;range&#34;:{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                          &#34;req_time&#34;:{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                                        &#34;gte&#34;:&#34;2017-01-01 00:00:00&#34;,&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                                        &#34;lt&#34;:&#34;2017-08-08 00:00:00&#34;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                                     }&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                       }&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                }&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;        }&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;  }&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;} &#39;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;ul class=&#34;simple&#34;&gt;
  &lt;li&gt;
    分页 ES的分页使用”from”和”size”参数。例如，每页10条，返回第1页。
  &lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight-bash&#34;&gt;
  &lt;table class=&#34;highlighttable&#34;&gt;
    &lt;tr&gt;
      &lt;td class=&#34;linenos&#34;&gt;
        &lt;div class=&#34;linenodiv&#34;&gt;
          &lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11&lt;/pre&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;code&#34;&gt;
  &lt;div class=&#34;highlight&#34;&gt;
    &lt;pre&gt;&lt;span class=&#34;highlighted&#34;&gt;curl&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&#34;https://endpoint/_search?pretty&#34;&lt;/span&gt;  -d &lt;span class=&#34;s1&#34;&gt;&#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;     &#34;from&#34;: 0,&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;     &#34;size&#34;: 10,&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;     &#34;query&#34;: {&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;         &#34;term&#34;: {&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;              &#34;user_name&#34;: &#34;superuser&#34;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;         }&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;     }&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&#39;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;
  由于ES的实现机制，ES并不鼓励使用分页，在size较大且from的页码也较大时，ES可能无法及时响应。
&lt;/p&gt;
&lt;ul class=&#34;simple&#34;&gt;
  &lt;li&gt;
    如果需要返回所有命中文档 如果命中文档超过一千，用上述方法不容易拿到所有结果。需要使用 &lt;strong&gt;scroll and scan&lt;/strong&gt; 方法。 参见 &lt;a class=&#34;reference external&#34; href=&#34;https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html&#34;&gt;https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;line-block&#34;&gt;
&lt;/div&gt;
&lt;ul class=&#34;simple&#34;&gt;
  &lt;li&gt;
    其他高级应用 如bool操作，以及复杂灵活的查询条件组合请参加官网文档。
  &lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
    </item>
  </channel>
</rss>
