Elasticsearch: Difference between revisions

From LemonWiki共筆
Jump to navigation Jump to search
mNo edit summary
m (Planetoid moved page Elastic search to Elasticsearch)
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Concept mapping ==
<table class="wikisort" border="1">
            <tr>
                <th>MySQL (RDBMS)</th>
                <th>Elasticsearch</th>
                <th>Excel</th>
                <th>Example Value (Bookstore)</th>
            </tr>
            <tr>
                <td>Table</td>
                <td>Index</td>
                <td>Worksheet</td>
                <td>books</td>
            </tr>
            <tr>
                <td>Row</td>
                <td>Document</td>
                <td>Row</td>
                <td class="code">{ "id": 1, "title": "The Great Gatsby", "author": "F. Scott Fitzgerald", "price": 9.99 }</td>
            </tr>
            <tr>
                <td>Field</td>
                <td>Field</td>
                <td>Column</td>
                <td>title</td>
            </tr>
            <tr>
                <td>Schema</td>
                <td>Mapping</td>
                <td>Column Headers</td>
                <td class="code"><pre>{
    "properties": {
        "title": { "type": "text" },
        "author": { "type": "keyword" },
        "price": { "type": "float" }
    }
}</pre></td>
            </tr>
            <tr>
                <td>SQL</td>
                <td>DSL</td>
                <td>Formulas/Filters</td>
                <td class="code">SQL: SELECT * FROM books WHERE author = 'F. Scott Fitzgerald'
DSL: { "query": { "term": { "author": "F. Scott Fitzgerald" } } }
Excel: Filter column "author" for "F. Scott Fitzgerald"</td>
            </tr>
    </table>


== Count the number of documents ==
== Count the number of documents ==
Line 12: Line 61:
SELECT COUNT(*) FROM MY_TABLE
SELECT COUNT(*) FROM MY_TABLE
</pre>
</pre>
== Truncate the index or table ==
Elasticsearch: [https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html Delete API | Elasticsearch Guide [8.15] | Elastic]<ref>[https://stackoverflow.com/questions/31929695/truncate-index-in-elasticsearch python - Truncate index in elasticsearch - Stack Overflow]</ref>
<pre>
DELETE /MY_INXEX/
</pre>
MySQL [https://dev.mysql.com/doc/refman/8.4/en/truncate-table.html MySQL :: MySQL 8.4 Reference Manual :: 15.1.37 TRUNCATE TABLE Statement]
<pre>
TRUNCATE MY_TABLE
</pre>
== Create the index or table ==
Elasticsearch<ref>[https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html#mappings Create index API | Elasticsearch Guide [8.15] | Elastic]</ref><ref>[https://opster.com/guides/elasticsearch/search-apis/elasticsearch-strings-keyword-vs-text-vs-wildcard/ Elasticsearch Keyword VS. Text - Strings Types Explained]</ref><ref>[https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html Field data types | Elasticsearch Guide [8.15] | Elastic]</ref>
<pre>
PUT /MY_INXEX
{
  "mappings": {
    "properties": {
    "id": { "type": "keyword" },
      "field1": { "type": "text" }
    }
  }
}
</pre>
MySQL<ref>[https://dev.mysql.com/doc/refman/8.4/en/create-table.html MySQL :: MySQL 8.4 Reference Manual :: 15.1.20 CREATE TABLE Statement]</ref>
<pre>
CREATE TABLE MY_TABLE (
  id INT AUTO_INCREMENT PRIMARY KEY,
  field1 TEXT
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
</pre>
== Select all data from index or table ==
Elasticsearch<ref>[https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-index.html Get index API | Elasticsearch Guide [8.15] | Elastic]</ref>
<pre>
GET /MY_INDEX/_search/?size=1000&pretty=true
</pre>
MySQL<ref>[https://dev.mysql.com/doc/refman/8.4/en/selecting-all.html MySQL :: MySQL 8.4 Reference Manual :: 5.3.4.1 Selecting All Data]</ref>
<pre>
SELECT *
FROM MY_TABLE
LIMIT 1000
</pre>
or
<pre>
SELECT *
FROM MY_TABLE
</pre>
== Select particular data from index or table (exact match) ==
Elasticsearch<ref>[https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-index.html Get index API | Elasticsearch Guide [8.15] | Elastic]</ref>
<pre>
GET /MY_INDEX/_search/?q=_id:1
</pre>
MySQL<ref>[https://dev.mysql.com/doc/refman/8.4/en/selecting-rows.html MySQL :: MySQL 8.4 Reference Manual :: 5.3.4.2 Selecting Particular Rows]</ref>
<pre>
SELECT *
FROM MY_TABLE
WHERE id = 1
</pre>
== Select particular data from index or table (partial match) ==
Elasticsearch<ref>[https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html Boolean query | Elasticsearch Guide [8.15] | Elastic]</ref>
<pre>
GET /MY_INDEX/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "field1": "NVIDIA"
          }
        }
      ]
    }
  }
}
</pre>
MySQL
<pre>
SELECT *
FROM MY_TABLE
WHERE field1 LIKE "%NVIDIA%"
</pre>
== References ==
<references />


[[Category: MySQL]] [[Category: Search]]
[[Category: MySQL]] [[Category: Search]]

Latest revision as of 16:46, 15 October 2024

Concept mapping[edit]

MySQL (RDBMS) Elasticsearch Excel Example Value (Bookstore)
Table Index Worksheet books
Row Document Row { "id": 1, "title": "The Great Gatsby", "author": "F. Scott Fitzgerald", "price": 9.99 }
Field Field Column title
Schema Mapping Column Headers
{
    "properties": {
        "title": { "type": "text" },
        "author": { "type": "keyword" },
        "price": { "type": "float" }
    }
}
SQL DSL Formulas/Filters SQL: SELECT * FROM books WHERE author = 'F. Scott Fitzgerald'

DSL: { "query": { "term": { "author": "F. Scott Fitzgerald" } } }

Excel: Filter column "author" for "F. Scott Fitzgerald"

Count the number of documents[edit]

Elasticsearch: Count API | Elasticsearch Guide [8.15 Elastic]

GET /MY_INXEX/_count

MySQL MySQL :: MySQL 8.4 Reference Manual :: 5.3.4.8 Counting Rows

SELECT COUNT(*) FROM MY_TABLE

Truncate the index or table[edit]

Elasticsearch: Delete API | Elasticsearch Guide [8.15 | Elastic][1]

DELETE /MY_INXEX/

MySQL MySQL :: MySQL 8.4 Reference Manual :: 15.1.37 TRUNCATE TABLE Statement

TRUNCATE MY_TABLE

Create the index or table[edit]

Elasticsearch[2][3][4]

PUT /MY_INXEX
{
  "mappings": {
    "properties": {
     "id": { "type": "keyword" },
      "field1": { "type": "text" }
    }
  }
}

MySQL[5]

CREATE TABLE MY_TABLE (
  id INT AUTO_INCREMENT PRIMARY KEY,
  field1 TEXT
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;


Select all data from index or table[edit]

Elasticsearch[6]

GET /MY_INDEX/_search/?size=1000&pretty=true


MySQL[7]

SELECT * 
FROM MY_TABLE
LIMIT 1000

or

SELECT * 
FROM MY_TABLE

Select particular data from index or table (exact match)[edit]

Elasticsearch[8]

GET /MY_INDEX/_search/?q=_id:1

MySQL[9]

SELECT * 
FROM MY_TABLE
WHERE id = 1


Select particular data from index or table (partial match)[edit]

Elasticsearch[10]


GET /MY_INDEX/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "field1": "NVIDIA"
          }
        }
      ]
    }
  }
}

MySQL

SELECT * 
FROM MY_TABLE
WHERE field1 LIKE "%NVIDIA%"

References[edit]