我是Elastic Search的新手。我已经收录电影艺术家(演员和导演)的ElasticSearch和一个简单的文本搜索工作正常,例如,如果我搜索“史蒂芬”语法如下弹性搜索中的function_score的语法
{"query":
{"query_string":
{"query":"steven"}
}
}
...我得到下面的结果,这是罚款:
1. Steven Conrad - Popularity (from document) = 487 - elasticsearch _score = 3,2589545
2. Steven Knight - Popularity (from document) = 487 - elasticsearch _score = 3,076738
3. Steven Waddington - Popularity (from document) = 431 - elasticsearch _score = 2,4931839
4. Steven E. De Souza - Popularity (from document) = 534 - elasticsearch _score = 2,4613905
5. Steven R. Monroe - Popularity (from document) = 293 - elasticsearch _score = 2,4613905
6. Steven Mackintosh - Popularity (from document) = 363 - elasticsearch _score = 2,2812681
7. Steven Wright - Popularity (from document) = 356 - elasticsearch _score = 2,2812681
8. Steven Soderbergh - Popularity (from document) = 5947 - elasticsearch _score = 2,270944
9. Steven Seagal - Popularity (from document) = 1388 - elasticsearch _score = 2,270944
10. Steven Bauer - Popularity (from document) = 714 - elasticsearch _score = 2,270944
然而,正如你可以在上面看到,我有一个普及数字字段我的文档中,并且,对于“史蒂芬”进行搜索时,我想最当红艺人(史蒂芬·索德伯格,史蒂文西格尔......)先来。
理想情况下,我想对结果进行排序由以上popularity * _score
我敢肯定,我必须使用弹性搜索的function_score
功能,但我不能找出确切的语法。
我试着做我的“改良”的语法如下
{
"query": {
"custom_score": {
"query": {
"query_string": {
"query": "steven"
}
},
"script": "_score * doc['popularity']"
}
}
}
搜索,但我得到一个异常(摘自错误信息如下:)
org.elasticsearch.search.query.QueryPhaseExecutionException: [my_index][4]: query[filtered(function score (_all:steven,function=script[_score * doc['popularity']], params [null]))->cache(_type:artist)],from[0],size[10]: Query Failed [Failed to execute main query]
// ....
Caused by: java.lang.RuntimeException: uncomparable values <<1.9709579>> and <<[email protected]>>
// ...
... 9 more
Caused by: java.lang.ClassCastException: org.elasticsearch.index.fielddata.ScriptDocValues$Longs cannot be cast to java.lang.Float
at java.lang.Float.compareTo(Float.java:33)
at org.elasticsearch.common.mvel2.math.MathProcessor.doOperationNonNumeric(MathProcessor.java:266)
在我的印象我使用的语法不正确
什么应该是正确的语法?还是有什么我失踪?感谢很多提前
编辑 我的表映射定义如下:
"mappings" : {
"artist" : {
"_all" : {
"auto_boost" : true
},
"properties" : {
"first_name" : {
"type" : "string",
"index" : "not_analyzed",
"analyzer" : "standard"
},
"last_name" : {
"type" : "string",
"boost" : 2.0,
"index" : "not_analyzed",
"norms" : {
"enabled" : true
},
"analyzer" : "standard"
},
"popularity" : {
"type" : "integer"
}
}
}
}
可以请你告诉我你是怎么让脚本我的意思是你写什么你YML文件或任何内部的请告诉我,我在寻找这为so长? –