2015-04-06 39 views
0

我一直在通過互聯網閱讀,試圖找出如何使用彈性搜索在一段文字中找到數字範圍。但是我沒有運氣。如何使用ElasticSearch查找一段文字中的數字範圍

下面是一個例子,假設我有以下一組文檔(請注意,文檔不會分成多個字段,它只是一個文本塊)。

DOC1 { 味精: 「我有7本書」 }

DOC2 { 味精: 「我有15本書」 }

doc3的{ 味精: 「我有19本書」 }

是否可以使用ElasticSearch來查詢所有擁有10到20本書的人?

感謝 豐富

回答

0

在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

+0

感謝您的詳細回覆斯隆。所以你說這只是開箱即用?我曾嘗試過使用Java API(1.5),並沒有取得任何成功。我今天晚上再試一次。一旦我確認它的工作原理,我會將您的答案標記爲正確。再次感謝。 – Rich

+0

我沒有用Java嘗試它,我只是在針對本地ES實例的「sense」鏈接中運行了代碼片段(啓用了CORS),並且它工作正常。 –

+0

經過測試,它似乎工作正常,謝謝。但我注意到其他問題。我將查詢更改爲「gt:10」 - 這不會產生我期望的結果。 – Rich

相關問題