2015-09-09 115 views
0

Elasticsearch版本:1.6.0Elasticsearch搜索產生任何結果,分析可能是問題

我一直在使用elasticsearch在過去的幾個月(剛開始),現在我正在與它的問題。這裏是關於我的數據庫的一些信息:

我使用的索引使用默認的動態映射(例如:我沒有修改它的映射)。我的對象應該是無模式的。另外,指數使用默認分析器(我沒碰過,要麼),所以index/_settings看起來是這樣的:

{ 
    "default": { 
     "settings": { 
      "index": { 
       "creation_date": "1441808338958", 
       "uuid": "34Yn1_ixSqOzp9UotOE_4g", 
       "number_of_replicas": "1", 
       "number_of_shards": "1", 
       "version": { 
        "created": "1060099" 
       } 
      } 
     } 
    } 
} 

下面是我在問題:在某些字段值如預期的那樣搜索無法正常工作(我的結論是因爲分析儀)。例如:字段email的值爲[email protected]; {"query":{"bool":{"must":[{"term":{"user.email":"[email protected]"}}]}}將無法​​正常工作,但將term value定義爲「user」可行(因爲它以某種方式將其標記爲標記,並且沒有包含完整電子郵件地址的標記)。

這裏就是我想:我想兩者通配符文本搜索(找到在註釋的文字一個壞詞)和嚴格搜索(如在電子郵件爲例)上的任何字段,然後我會使用boolshouldtermwildcard

問題是我不能告訴他「好吧,在這個領域你應該使用X分析器」,因爲我所有的領域都是動態的。

我試過:在索引的設置上,我輸入了這個:{"analysis":{"analyzer":{"default":{"type":"keyword"}}}};不工作:沒有任何改變(我也沒有忘記在這樣做之前關閉索引並打開它)。

這個問題是否與分析儀有關?

+1

如果更改[分析儀設置](https://www.elastic。co/guide/en/elasticsearch/guide/current/reindex.html#reindex),您將需要重新索引文檔。 – keety

回答

0

隨着瑞安黃長髮的幫助下,我已經解決了我的問題:

使用動態映射;創建如下索引:

PUT /index 
{ 
    "mappings": { 
    "_default_": { 
     "dynamic_templates": [ 
     { 
      "string_template": { 
      "mapping": { 
       "index": "not_analyzed", 
       "type": "string" 
      }, 
      "match_mapping_type": "string", 
      "match": "*" 
      } 
     } 
     ] 
    } 
} 
1

這個查詢將行不通

{ 「查詢」:{ 「布爾」:{ 「必須」:[{ 「術語」:{ 「user.email」:「[email protected] 「}}]}}

期限是精確匹配,該字段意味着無論你的價值(」 [email protected]「你的情況)必須匹配任何令牌 ES擁有該領域。

當您不爲該字段分配任何分析儀時,ES會假定您正在使用該字段的標準分析儀。當此「[email protected]」編入索引時,它將被標記爲(「user」,「example」,「com」)。

爲了解決您的問題,您必須告訴ES在您的索引映射中「not_analyzed」電子郵件字段。

+0

我需要爲我的所有領域(這是動態的)做到這一點。所以我想我必須做一個動態映射 – Mayhem93