我一直在通過互聯網閱讀,試圖找出如何使用彈性搜索在一段文字中找到數字範圍。但是我沒有運氣。如何使用ElasticSearch查找一段文字中的數字範圍
下面是一個例子,假設我有以下一組文檔(請注意,文檔不會分成多個字段,它只是一個文本塊)。
DOC1 { 味精: 「我有7本書」 }
DOC2 { 味精: 「我有15本書」 }
doc3的{ 味精: 「我有19本書」 }
是否可以使用ElasticSearch來查詢所有擁有10到20本書的人?
感謝 豐富
我一直在通過互聯網閱讀,試圖找出如何使用彈性搜索在一段文字中找到數字範圍。但是我沒有運氣。如何使用ElasticSearch查找一段文字中的數字範圍
下面是一個例子,假設我有以下一組文檔(請注意,文檔不會分成多個字段,它只是一個文本塊)。
DOC1 { 味精: 「我有7本書」 }
DOC2 { 味精: 「我有15本書」 }
doc3的{ 味精: 「我有19本書」 }
是否可以使用ElasticSearch來查詢所有擁有10到20本書的人?
感謝 豐富
在ES 1.5,該keep_types
token filter是專爲這樣的事情,很明顯。我在此代碼設置它(與ES 1.5),它似乎工作:
http://sense.qbox.io/gist/b2c86b748d0c33957df1dcb90a3b405b0a4ca646
不過,我並沒有真正需要的是得到它的工作。該standard analyzer劃分文成基於空白標記,所以你可以再申請的range
查詢(過濾器的工作原理也是如此)針對外地,似乎做你想要的東西:
我成立了一個簡單的指標:
DELETE /test_index
PUT /test_index
POST /test_index/doc/_bulk
{ "index": { "_id": 1 }}
{ "msg": "I have 7 books" }
{ "index": { "_id": 2 }}
{ "msg": "I have 15 books" }
{ "index": { "_id": 3 }}
{ "msg": "I have 19 books" }
然後使用範圍查詢:
POST /test_index/_search
{
"query": {
"range": {
"msg": {
"from": 10,
"to": 20
}
}
}
}
...
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "test_index",
"_type": "doc",
"_id": "2",
"_score": 1,
"_source": {
"msg": "I have 15 books"
}
},
{
"_index": "test_index",
"_type": "doc",
"_id": "3",
"_score": 1,
"_source": {
"msg": "I have 19 books"
}
}
]
}
}
下面是第二個例子的代碼:
http://sense.qbox.io/gist/0979803673efb5b7ff063c257efd82617a93bd06
感謝您的詳細回覆斯隆。所以你說這只是開箱即用?我曾嘗試過使用Java API(1.5),並沒有取得任何成功。我今天晚上再試一次。一旦我確認它的工作原理,我會將您的答案標記爲正確。再次感謝。 – Rich
我沒有用Java嘗試它,我只是在針對本地ES實例的「sense」鏈接中運行了代碼片段(啓用了CORS),並且它工作正常。 –
經過測試,它似乎工作正常,謝謝。但我注意到其他問題。我將查詢更改爲「gt:10」 - 這不會產生我期望的結果。 – Rich