弹性搜索版本:6.2.4
我现在通过以下方式获得了复合聚合的结果:
GET index/_search
{
"aggs": {
"my_buckets": {
"composite": {
"sources": [
{
"name": {
"terms": {
"field": "name.keyword"
}
}
}
]
}
}
},
"query":{
}
}
Run Code Online (Sandbox Code Playgroud)
为简化问题,此处省略查询部分。
我可以得到如下结果:
"aggregations": {
"my_buckets": {
"buckets": [
{
"key": {
"name": "Bill Gates"
},
"doc_count": 1
},
{
"key": {
"name": "Steven Paul Jobs"
},
"doc_count": 1
},
{
"key": {
"name": "Gates Godar"
},
"doc_count": 1
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到搜索结果的顺序不是按查询字符串的来源(相似性)排序的。
我们如何实现按分数对复合聚合结果进行排序?
谢谢。
我想在一个字段中搜索“ vision”项目,但是通过在DSL中使用match / match_phrace / term,我只得到了“ vision A”,“ vision B”,“ xx版本”,“ vision”等结果。
我要的是精确匹配“视觉”应该获得最高分,而包含“视觉”的项目应该排在精确匹配之后。排名应该是:
vision > vision A > vision B > xx version
Run Code Online (Sandbox Code Playgroud)
我检查了Elasticsearch匹配精确术语,在该术语中可以识别将“索引”更改为“ not_analyzed”以实现精确匹配。但是在我的情况下,不仅需要完全匹配,还需要包含匹配。
在这种情况下我该怎么办?谢谢!
我在Java中创建了一个客户端,想从索引中获取查询结果,但收到406错误:“不支持Content-Type标头[text / plain]”,“状态”:406。
Java平台:1.6
ES版本:6.0
下面是代码片段:
Client clientInstance = Client.create();
clientInstance.addFilter(new HTTPBasicAuthFilter("", ""));
WebResource webResource =
clientInstance.resource("http://hostname:9200/indexname/_search");
ClientResponse response=webResource.entity(dsl).accept("application/json").get(ClientResponse.class);
String result = response.getEntity(String.class);
Run Code Online (Sandbox Code Playgroud)
我在Kibana中使用dsl,可以获取正确的查询结果。但是它没有在Java中获得正确的响应并抛出406错误。
如何解决此问题?非常感谢!