我的索引pcap_activate()
包含以下blog
和settings
。
mappings
我想根据相关性和访问者的上次访问对帖子进行排名。我尝试了这个查询没有成功。似乎高斯函数无法获得PUT /blog
{
"settings": {
"index": {
"number_of_shards": "1"
}
},
"mappings": {
"post": {
"_all": {
"enabled": false
},
"properties": {
"title": {
"type": "string"
},
"content": {
"type": "string"
},
"visitor": {
"type": "nested",
"properties": {
"id": {
"type": "string",
"index": "not_analyzed"
},
"last_visit": {
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
}
}
}
}
' s visitor
的值。如何使这个工作?
last_visit
答案 0 :(得分:0)
这是一个匹配名称的查询,该名称使用我对特定用例的嵌套对象。我没有使用任何日期字段,但正如我所说,它确实使用嵌套对象。我使用距离的相关性和文本匹配,所以它是相似的。
我使用了这个问题的答案来构建我的查询,因为它符合我的尝试。 Scoring documents by text match and distance
GET dev_search_core_data/_search?size=200
{
"query": {
"bool": {
"should": [
{
"match": {
"NAME": "Amy Smith"
}
},
{
"bool": {
"must": [
{
"function_score": {
"query": {
"nested": {
"path": "LOCATION",
"query": {
"term": {
"LOCATION.SOME_IND": {
"value": true
}
}
}
}
},
"functions": [
{
"gauss": {
"LOCATION.COORDINATES": {
"origin": "-118.309, 34.041",
"scale": "50km",
"offset": "10km",
"decay": 0.5
}
}
}
]
}
}
]
}
}
]
}
}
}
我认为问题在于查询的结构。我总是首先运行此命令来验证我的查询,如果我有任何问题,以消除任何语法问题。
GET dev_search_core_data/_validate/query?explain
这是结果:
{
"valid": true,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"explanations": [
{
"index": "dev_search_core_data_b",
"valid": true,
"explanation": "filtered((NAME:amy NAME:smith) (+function score (ToParentBlockJoinQuery (filtered(LOCATION.SOME_IND:true)->random_access(_type:_LOCATION)),function=org.elasticsearch.index.query.functionscore.DecayFunctionParser$GeoFieldDataScoreFunction@274227b9)))->cache(org.elasticsearch.index.search.nested.NonNestedDocsFilter@1012ada6)"
}
]
}
我还查看了文档,深入解释了function score的工作原理。你没有提到你的版本,但我使用的是ES 1.6。