【发布时间】:2015-03-04 20:24:35
【问题描述】:
我正在使用 Elasticsearch 在我的数据库中查询作业。以下是我正在使用的查询。
查询应要求以下内容:
-查询匹配文本、名称或描述
-Job 必须包含所有给定的类别和细分
但是,我遇到的问题是,当我提出查询并添加细分和类别时。该查询表面上被忽略,并且该请求返回具有给定细分和类别的所有作业。
{
"index": "jobs",
"type": "job",
"body": {
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"match": {
"categories": "23"
}
},
{
"match": {
"segments": "10"
}
}
],
"should": [
{
"match": {
"name": "php"
}
},
{
"match": {
"text": "php"
}
},
{
"match": {
"description": "php"
}
}
]
}
},
"filter": {
"nested": {
"path": "networks",
"filter": {
"bool": {
"must": [
{
"term": {
"networks.id": 1
}
},
{
"term": {
"networks.status.raw": "PRODUCTION"
}
},
{
"range": {
"networks.start": {
"lte": "now"
}
}
},
{
"range": {
"networks.end": {
"gte": "now"
}
}
}
]
}
}
}
}
}
},
"aggs": {
"categories": {
"terms": {
"field": "categories"
}
},
"segments": {
"terms": {
"field": "segments"
}
}
}
}
}
作为旁注,我使用的是 laravel 和 elasticsearch 的 php 实现,上面是查询数组的 json_encoded 表示。 (类型可以被玩弄)
【问题讨论】:
-
作为建议,发送到弹性不是字符串“23”,而是 int 23,因为它有比较问题(例如:“23”!=23)
-
这是由于我使用 elasticsearchs php 实现,上面是查询数组的 json 编码表示(可能不完全是发送到 ES0 的内容。
标签: php laravel elasticsearch