2014年5月15日 星期四

[elasticsearch]如何使用 elasticsearch url query string search



elasticsearch 是一套基於 lucene 知名的 open source search tool ,他與 solr 相同都是為了提供  enterprise search platform 。整個 elasticsearch的使用情境都可以在原生的 JSON 與 RESTful 的環境中進行。

JSON / RESTful / Query DSL

"elasticsearch provides a full Query DSL based on JSON to define queries"

除了 query DSL(domain specific language) 使用 JSON 與 REST 的方式做query ,還能怎麼query呢?

URL query string query

elasticsearch 也提供了把query string 放在 url 的 parameters 內當做request。但是並不是所有在 elasticsearch 內的 search 都有提供這樣的模式,直接使用 url paremeter,可以工作簡單的手動測試。

curl -XGET 'http://tmdesk:9200/articles/_search?q=name:pc'
response
{
    "_shards": {
        "failed": 0,
        "successful": 5,
        "total": 5
    },
    "hits": {
        "hits": [
            {
                "_id": "B28BrraZR5qPQUWwgul2gQ",
                "_index": "articles",
                "_score": 0.19178301,
                "_source": {
                    "tags": [
                        "foo"
                    ],
                    "title": "One",
                    "name": "pc"

                },
                "_type": "article"
            }
        ],
        "max_score": 0.19178301,
        "total": 1
    },
    "timed_out": false,
    "took": 2
}

列舉出一些比較常見可以使用在 URL parameter的  args

  • q :可使用 lucene 的query syntax
  • df :default field
  • analyzer :指定使用什麼analyzer 去 analyzing query string
  • default_operator :可以使用 "AND" 或是 "OR" ,預設情況下是 "OR"
  • fields: 指定要return 的 store fields 可以用 "," 分隔開。
  • sort: 指定 sorting的依據,可以使用 "filedName" , "fieldName:asc" ,或是 "fieldName:desc"。
  • from : 從 hits record的第幾筆資料開始return 預設是 0
  • size : 指定 return 多少hit records ,預設是 10。
  • search_type : dfs_query_then_fetch, dfs_query_and_fetch, query_then_fetch, query_and_fetch, count, scan. 預設是 "query_then_fetch"
  • lowercase_expanded_terms : term 會被自動 lowercased 嗎? 預設是 true


ref:
Apache Lucene - Apache Lucene Core
http://lucene.apache.org/core/

沒有留言:

張貼留言