2015-01-05 53 views
1

與斜線的工作我的分貝充滿了文件是這樣的:Elasticsearch不會在開始

{ 
    _index: "bla_bla", 
    . 
    . 
    . 
    _source: { 
    domain: "somedomain.extension", 
    path: "/you/know/the/path", 
    lang: "en", 
    keywords: ["yeah", "you", "rock", "dude", "help", "me", "good", "samaritan"] 
    } 
} 

當我搜索 - 不管什麼,我找 - 它就像一個魅力,但如果我試圖通過使用稱爲路徑的字段來過濾某些內容 - 簡單地說 - 不起作用;不會引發單個錯誤或警告。經過辛苦的研究後,我想這是因爲斜槓的路徑的開始,我可能是正確的或沒有,但無論如何,我需要過濾這樣的:

{ 
    "query": { 
     "filtered": { 
      "filter": { 
       "bool": { 
        "should": { 
         "terms": { 
          "keywords": ["stackoverflow", "rocks", "!"] 
         } 
        }, 
        "must_not": { 
         "term": { 
          "path": "/" 
          // This works, i.e -> "lang": "en" 
         } 
        } 
       }  
      } 
     } 
    }, 
    "from": 0, 
    "size": 9 
} 

TL; DR:擁有數據庫網址,我怎樣才能得到只有非根 [路徑比「/」]長?

回答

0

免責聲明:我不是ES的專家,但如果正確地理解它,你想要的是排除所有隻有/的文件。到底。看到你總是將數據存儲爲/path,如果你有一個字符串,它應該總是/,那麼爲什麼不使用正則表達式?

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-regexp-filter.html

像這樣的東西應該做的伎倆,我想:

{ 
    "query": { 
     "filtered": { 
      "filter": { 
       "and": [ 
        { 
         "bool": { 
          "should": { 
           "terms": { 
            "keywords": [ 
             "stackoverflow", 
             "rocks", 
             "!" 
            ] 
           } 
          } 
         } 
        }, 
        { 
         "filter": { 
          "regexp": { 
           "path": ".{1,}" 
          } 
         } 
        } 
       ] 
      } 
     } 
    }, 
    "from": 0, 
    "size": 9 
} 
3

在ElasticSearch,文本上的字符,包括斜線分割。你需要做的是使用「not_analyzed」索引。這裏是一個工作示例,請注意「路徑」字段上的索引規範:

PUT /index1/test/_mapping 
{ 
    "test" : { 
     "properties" : { 
      "message" : {"type" : "string"}, 
      "path" : {"type" : "string", "index" : "not_analyzed"} 
     } 
    } 
} 

POST index1/test 
{ 
    "path" : "/foo/bar" 
} 

GET index1/test/_search 
{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "term": { 
      "path": "/foo/bar" 
     } 
     } 
    } 
    } 
} 
+0

我可以輕鬆更改映射的這個參數嗎? @jhilden – sospedra

+0

如果您輸入更新後的映射,它將應用所有新數據,但爲了適用於現有數據,您需要重新索引。有很多職位可以幫助完成這項任務。 – jhilden