我正在使用 elasticsearch 搜索引擎,当我运行下面的代码时,返回的结果与范围条件不匹配(我得到的项目的发布日期低于所需的限制):
#!/bin/bash
curl -X GET 'http://localhost:9200/newsidx/news/_search?pretty' -d '{
"fields": [
"art_text",
"title",
"published",
"category"
],
"query": {
"bool": {
"should": [
{
"fuzzy": {"art_text": {"boost": 89, "value": "google" }}
},
{
"fuzzy": {"art_text": {"boost": 75, "value": "twitter" }}
}
],
"minimum_number_should_match": 1
}
},
"filter" : {
"range" : {
"published" : {
"from" : "2013-04-12 00:00:00"
}
}
}
}
'
Run Code Online (Sandbox Code Playgroud)
我还尝试将 range 子句放在一个 must 中,在 bool 查询中,但结果是一样的。
编辑:我使用 elasticsearch 通过河流插件在 mongodb 中进行搜索。这是我用 ES 搜索 mongodb db 的脚本:
#!/bin/bash
curl -X PUT localhost:9200/_river/mongodb/_meta -d '{
"type":"mongodb",
"mongodb": {
"db": "newsful",
"collection": "news"
},
"index": {
"name": "newsidx",
"type": "news"
}
}'
Run Code Online (Sandbox Code Playgroud)
除此之外,我没有创建其他索引。
编辑2:
es 映射的视图:
http://localhost:9200/newsidx/news/_mapping
published: {
type: "string"
}
Run Code Online (Sandbox Code Playgroud)
原因在于你的映射。您用作日期的已发布字段将作为字符串进行索引。这可能是因为您使用的日期格式不是 Elasticsearch 中的默认格式,因此不会自动检测字段类型,并且将其索引为简单字符串。
您应该使用put 映射 api更改您的映射。您需要将发布的字段定义为日期,指定您正在使用的格式(可以不止一种)并重新索引您的数据。
之后您的范围过滤器应该可以工作!
| 归档时间: |
|
| 查看次数: |
4444 次 |
| 最近记录: |