从MySQL查询到Elastic Search DSL

时间:2017-05-15 07:07:32

标签: elasticsearch elasticsearch-dsl

这个问题虽然看似很长,但我做了一个彻底的研究和已经达成了一个有效的解决方案,但我的解决方案需要一些改进。

首先, 这是一个名为MySQL的{​​{1}}表:

content_table

我已使用以下设置将此表格编入 ╔════╦════════════╦══════════╦═════════════╦═════════════╦═════════╦════════╗ ║ id ║ title ║ type ║ genre ║ countries ║ devices ║ status ║ ╠════╬════════════╬══════════╬═════════════╬═════════════╬═════════╬════════╣ ║ 1 ║ without me ║ playlist ║ rap ║ US,AU,PK,NZ ║ 1,2,3,4 ║ 1 ║ ║ 2 ║ Still Dre ║ playlist ║ rap hits ║ US,PK,NZ,AE ║ 1,4 ║ 1 ║ ║ 3 ║ Scarface ║ movies ║ action ║ US ║ 4 ║ 1 ║ ║ 4 ║ wild cats ║ video ║ documentary ║ UAE,PK,IN ║ 1,2,5 ║ 0 ║ ╚════╩════════════╩══════════╩═════════════╩═════════════╩═════════╩════════╝ 。映射。

Elastic Search cluster

现在,我想将以下{ "settings":{ "analysis":{ "filter":{ "myNGramFilter":{ "type":"edgeNGram", "min_gram":1, "max_gram":30 } }, "analyzer":{ "myNGramAnalyzer":{ "type":"custom", "tokenizer":"standard", "filter":[ "lowercase", "myNGramFilter" ] } } } }, "mappings":{ "content":{ "properties":{ "title":{ "type":"text", "fielddata":true, "analyzer":"myNGramAnalyzer", "search_analyzer":"standard" }, "countries":{ "type":"string", "index":"not_analyzed" }, "devices":{ "type":"string", "index":"not_analyzed" }, "genre":{ "type":"text", "fielddata":true, "analyzer":"myNGramAnalyzer", "search_analyzer":"standard" } } } } } 查询转换为查询MySQL

DSL

到目前为止,通过跟踪Elastic Search Reference guide这个我最终为了转换 SELECT * FROM my_table WHERE status_srh <> 0, AND ( countries IS NULL OR FIND_IN_SET('US', countries_geo) > 0 ) AND FIND_IN_SET("1", device_ids) AND ( title LIKE "Still Dre" OR genre LIKE "rap" ) AND ( TYPE <> 'playlist' OR TYPE <> 'blocked content' ) GROUP BY id, type_srh ORDER BY title

MySQL query to Query DSL

到目前为止工作正常,并且返回给我一个没有错误的结果集但是我的问题是,我有一种方法可以改进我的方法并更加适当和有效地实现相同的功能。任何改进的余地?专家意见对像我这样的初学者非常有帮助。三江源。

更新 将这两行添加到搜索DSL查询中:

{
   "from":0,
   "size":100,
   "query":{
      "bool":{
         "must":[
            {
               "bool":{
                  "must_not":[
                     {
                        "match":{
                           "status":"0"
                        }
                     }
                  ]
               }
            },
            {"term": { "countries_geo": "US" }},
            {"term": {"device_ids": "2"}},
            {
               "bool":{
                  "should":[
                     {
                        "match_phrase":{
                           "title":"Still"
                        }
                     },
                     {
                        "match_phrase":{
                           "genre":"rap"
                        }
                     }
                  ]
               }
            },
            {
               "bool":{
                  "must_not":[
                     {
                        "match":{
                           "type":"playlist"
                        }
                     },
                     {
                        "match":{
                           "type":"blocked content"
                        }
                     }
                  ]
               }
            }
         ]
      }
   },
   "sort":{
      "title":{
         "order":"asc"
      }
   }
}

0 个答案:

没有答案