Commit 96cafa2c authored by 赵威's avatar 赵威

generate answer

parent f7e12461
...@@ -30,8 +30,7 @@ class UserInfoDeserializationSchema extends KafkaDeserializationSchema[UserInfo] ...@@ -30,8 +30,7 @@ class UserInfoDeserializationSchema extends KafkaDeserializationSchema[UserInfo]
object Main { object Main {
def main(args: Array[String]): Unit = { def main(args: Array[String]): Unit = {
// println("###############") // println("###############")
// val query = ES.generateDiaryQuery(List("光子嫩肤", "水光针"), List("丰胸", "胸部塑身"), -1) // val query = ES.generateAnswerRequest(List("光子嫩肤", "水光针"), List("丰胸", "胸部塑身"))
// query
// println("###############") // println("###############")
val env = StreamExecutionEnvironment.getExecutionEnvironment val env = StreamExecutionEnvironment.getExecutionEnvironment
...@@ -57,12 +56,14 @@ object Main { ...@@ -57,12 +56,14 @@ object Main {
val secondDemands = user.secondDemands.toList val secondDemands = user.secondDemands.toList
println(user.deviceId) println(user.deviceId)
println(projects.mkString(" ")) println(projects.mkString(" "))
if ((projects.size > 0) || (secondDemands.size > 0)) {
val diaryQuery = ES.generateDiaryQuery(projects, secondDemands, -1) val diaryReq = ES.generateDiaryRequest(projects, secondDemands, user.cityId)
val tractateQuery = ES.generateTractateQuery(projects, secondDemands) val tractateReq = ES.generateTractateRequest(projects, secondDemands)
ES.test(diaryQuery, tractateQuery) val answerReq = ES.generateAnswerRequest(projects, secondDemands)
} ES.test(diaryReq, tractateReq, answerReq)
println("########################") println("########################")
user.deviceId
} }
// stream.print // stream.print
......
...@@ -59,21 +59,23 @@ object ES { ...@@ -59,21 +59,23 @@ object ES {
} }
} }
def test(diaryQuery: SearchRequest, tractateQuery: String) = { def test(diaryRequest: SearchRequest, tractateRequest: SearchRequest, answerRequest: SearchRequest) = {
// TODO read from config // TODO read from config
val client: ElasticClient = ESClient.create("172.16.52.33", 9200, "elastic", "gengmei!@#") val client: ElasticClient = ESClient.create("172.16.52.33", 9200, "elastic", "gengmei!@#")
val bb = multi( val multiReq = multi(
diaryQuery, diaryRequest,
search("gm-dbmw-tractate-read").source(tractateQuery) tractateRequest,
answerRequest
) )
println(bb.show) println(multiReq.show)
println(diaryQuery) println(diaryRequest)
println(tractateQuery) println(tractateRequest)
println(answerRequest)
// TODO remove await // TODO remove await
val resp = client.execute(bb).await val resp = client.execute(multiReq).await
// println(resp) // println(resp)
...@@ -89,7 +91,7 @@ object ES { ...@@ -89,7 +91,7 @@ object ES {
resp resp
} }
def generateDiaryQuery( def generateDiaryRequest(
projects: List[String], projects: List[String],
secondDemands: List[String], secondDemands: List[String],
cityId: Int = -1 cityId: Int = -1
...@@ -154,67 +156,101 @@ object ES { ...@@ -154,67 +156,101 @@ object ES {
res res
} }
def generateTractateQuery(projects: List[String], secondDemands: List[String]): String = { def generateTractateRequest(projects: List[String], secondDemands: List[String]): SearchRequest = {
val size = 30 val size = 15
val includes = List("id", "tags_v3") val includes = List("id", "tags_v3")
var scoreListBuffer: ListBuffer[ScoreFunction] = ListBuffer.empty[ScoreFunction]
var shouldListBuffer: ListBuffer[Query] = ListBuffer.empty[Query]
val functions = new ListBuffer[JObject]()
val shoulds = new ListBuffer[JObject]()
if (projects.size > 0) { if (projects.size > 0) {
val promotes: List[JObject] = scoreListBuffer += WeightScore(60).filter(
List(("terms" -> ("tags_v3" -> projects)), ("term" -> ("is_promote" -> true))) must(termsQuery("tags_v3", projects), termQuery("is_promote", true))
)
functions += ("filter" -> ("bool" -> ("must" -> promotes))) ~ ("weight" -> 60) scoreListBuffer += WeightScore(50).filter(termsQuery("tags_v3", projects))
shouldListBuffer += TermsQuery("tags_v3", projects)
functions += ("filter" -> ("terms" -> { "tags_v3" -> projects })) ~ ("weight" -> 50)
shoulds += ("terms" -> ("tags_v3" -> projects))
} }
if (secondDemands.size > 0) { if (secondDemands.size > 0) {
functions += ("filter" -> ("terms" -> ("second_demands" -> secondDemands))) ~ ("weight" -> 40) scoreListBuffer += WeightScore(40).filter(termsQuery("second_demands", secondDemands))
shouldListBuffer += TermsQuery("second_demands", secondDemands)
shoulds += ("terms" -> ("second_demands" -> secondDemands))
} }
val query = s""" val res = search("gm-dbmw-tractate-read")
{ .query {
"query": { functionScoreQuery()
"function_score": { .functions(scoreListBuffer.toList)
"functions": ${pretty(render(functions.toList))}, .scoreMode(FunctionScoreQueryScoreMode.Max)
"boost_mode": "replace", .boostMode(CombineFunction.Replace)
"score_mode": "max", .query {
"query": { boolQuery()
"bool": { .must(
"should": ${pretty(render(shoulds.toList))}, termQuery("is_online", true),
"minimum_should_match": 1, rangeQuery("content_level").gte(3)
"must": [ )
{ .not(termQuery("show_by_index", 2), termQuery("status", 4))
"term": { .should(shouldListBuffer.toList)
"is_online": "true" .minimumShouldMatch(1)
} }
},
{
"terms": {
"content_level": [6, 5, 4, 3.5, 3]
} }
.size(size)
.sourceInclude(includes)
.sortBy(
FieldSort("_score").desc()
)
// println("tractate query")
// println(res.show)
res
} }
],
"must_not": [ def generateAnswerRequest(projects: List[String], secondDemands: List[String]): SearchRequest = {
{ "term": { "status": 4 } }, val size = 15
{ "term": { "show_by_index": 2 } } val includes = List("id", "tags_v3")
] var scoreListBuffer: ListBuffer[ScoreFunction] = ListBuffer.empty[ScoreFunction]
var shouldListBuffer: ListBuffer[Query] = ListBuffer.empty[Query]
if (projects.size > 0) {
scoreListBuffer += WeightScore(60).filter(
must(termsQuery("tags_v3", projects), termQuery("is_promote", true))
)
scoreListBuffer += WeightScore(50).filter(termsQuery("tags_v3", projects))
shouldListBuffer += TermsQuery("tags_v3", projects)
} }
if (secondDemands.size > 0) {
scoreListBuffer += WeightScore(40).filter(termsQuery("second_demands", secondDemands))
shouldListBuffer += TermsQuery("second_demands", secondDemands)
}
val res = search("gm-dbmw-tractate-read")
.query {
functionScoreQuery()
.functions(scoreListBuffer.toList)
.scoreMode(FunctionScoreQueryScoreMode.Max)
.boostMode(CombineFunction.Replace)
.query {
boolQuery()
.must(
termQuery("is_online", true),
rangeQuery("content_level").gte(3),
rangeQuery("content_length").gte(30)
)
.not(termQuery("show_by_index", 2))
.should(shouldListBuffer.toList)
.minimumShouldMatch(1)
} }
} }
}, .size(size)
"size": ${size}, .sourceInclude(includes)
"_source": {"include": ${pretty(render(includes))}} .sortBy(
} FieldSort("_score").desc(),
""".stripMargin FieldSort("has_picture").desc(),
FieldSort("smart_rank_v2").desc(),
FieldSort("good_click").desc()
)
// println("tractate query:") // println("answer query")
// println(query) // println(res.show)
query
res
} }
} }
...@@ -5,6 +5,8 @@ case class UserInfo( ...@@ -5,6 +5,8 @@ case class UserInfo(
action: String, action: String,
logTime: Double, logTime: Double,
eventCn: String, eventCn: String,
cityId: Int,
secondDemands: Array[String], secondDemands: Array[String],
projects: Array[String] projects: Array[String],
bussinessTags: Array[String]
) )
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment