默認使用 空格拆分成 多個 子項,並且 每個子項 都會去分詞 查詢。可以通過 default_operator 指定 子項之間的關系。默認是 或 。 然后 每個 子項前面可以使用 -+ 指定必須有 或者必須么有。並且 加了修飾符 +- 的 提出單獨算。
測試數據:
{ "took": 4523, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 4, "max_score": 1, "hits": [ { "_index": "test01", "_type": "doc", "_id": "2", "_score": 1, "_source": { "name": "zhang san" } }, { "_index": "test01", "_type": "doc", "_id": "4", "_score": 1, "_source": { "name": "張玉坤" } }, { "_index": "test01", "_type": "doc", "_id": "1", "_score": 1, "_source": { "name": "zhang yu kun" } }, { "_index": "test01", "_type": "doc", "_id": "3", "_score": 1, "_source": { "name": "li san" } } ] } }
"query": "zhang san",
"default_operator": "OR" 可以查詢 有 zhang 或者 san 的 。
"query": "zhang +san",
"default_operator": "OR" 查詢出 必須有san 可以有zhang 的 數據。( 有修飾符的 是提出來優先算的,剩下的在算 或關系 。並且 或中至少要有一個 ),因為只剩一個or 所以這個 zhang 必須有 。所有就是 有 zhang 有 san
"query": "zhang -san",
"default_operator": "OR" 查詢 必須沒有san ,剩下 or 只有一個zhang 所以這個zhang 必須瞞住。所以就是 必須有zhang ,但是必須沒有san
"query": "張三",
"default_operator": "OR" 依舊可以查到張玉坤,所以 是分詞的。 分詞以后是或 關系。並且+- 的修飾只能出現在詞頭。不能出現在詞中
"query": "張三",
"default_operator": "AND" 這個就什么都查詢不到了。說明 default_operator 對分詞以后的term 生效。
加一個
PUT /test01/doc/5
{
"name":"kun bo"
}
"query_string": {
"query": "zhang bo -san" 這時候查詢出了新添加的那條 ,所以 沒有 san , zhang 和 bo 帶一個就可以。
"query_string": {
"query": "zhang bo +san" 這按照我的猜想應該是 必須有 san , zhang bo 有一個 。但是 卻 可以 zhang bo 都沒有。 這個就不知道為啥了,姑且 當做 es 的 一個bugger 吧。
在說說 mach 查詢 。mach 查詢只是 分詞以后查詢。相當於 query_string 空格 隔開的 一個子項。