这个问题虽然看似很长,但我做了一个彻底的研究和已经达成了一个有效的解决方案,但我的解决方案需要一些改进。
首先,
这是一个名为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"
}
}
}