2013-10-07 38 views
1

通過閱讀Elasticsearch文檔,我希望命名分析器的default_search將導致該分析器用於所有搜索,除非指定了另一個分析器。但是,如果我定義我的指數,像這樣:Elasticsearch不使用「default_search」分析器,除非在查詢中明確聲明

curl -XPUT 'http://localhost:9200/test/' -d '{ 
    "settings": { 
     "analysis": { 
      "analyzer": { 
       "my_ngram_analyzer": { 
        "tokenizer": "my_ngram_tokenizer", 
        "filter": [ 
         "lowercase" 
        ], 
        "type" : "custom" 
       }, 
       "default_search": { 
        "tokenizer" : "keyword", 
        "filter" : [ 
         "lowercase" 
        ] 
       } 
      }, 
      "tokenizer": { 
       "my_ngram_tokenizer": { 
        "type": "nGram", 
        "min_gram": "3", 
        "max_gram": "100", 
        "token_chars": [] 
       } 
      } 
     } 
    }, 
    "mappings": { 
     "TestDocument": { 
      "dynamic_templates": [ 
       { 
        "metadata_template": { 
         "match_mapping_type": "string", 
         "path_match": "*", 
         "mapping": { 
          "type": "multi_field", 
          "fields": { 
           "ngram": { 
            "type": "{dynamic_type}", 
            "index": "analyzed", 
            "analyzer": "my_ngram_analyzer" 
           }, 
           "{name}": { 
            "type": "{dynamic_type}", 
            "index": "analyzed", 
            "analyzer": "standard" 
           } 
          } 
         } 
        } 
       } 
      ] 
     } 
    } 
}' 

,然後添加一個「TestDocument」:

curl -XPUT 'http://localhost:9200/test/TestDocument/1' -d '{ 
    "name" : "TestDocument.pdf" }' 

我的查詢仍然通過默認運行分析。我可以告訴大家,因爲這個查詢給了我一擊:

curl -XGET 'localhost:9200/test/TestDocument/_search?pretty=true' -d '{ 
    "query": { 
     "match": { 
        "name.ngram": { 
         "query": "abc.pdf" 
        } 
       } 
    } 
}' 

但是不一樣,如果我指定正確的分析(使用「關鍵字」標記生成器)

curl -XGET 'localhost:9200/test/TestDocument/_search?pretty=true' -d '{ 
    "query": { 
     "match": { 
        "name.ngram": { 
         "query": "abc.pdf", 
         "analyzer" : "default_search" 
        } 
       } 
    } 
}' 

我缺少什麼用「default_search 「搜索除非在我的查詢中另有說明?我只是在這裏誤解了預期的行爲?

回答

3

在您的動態模板中,您使用「分析器」設置搜索和索引分析器。它只會使用默認值作爲最後的手段。

"index_analyzer":"analyzer_name" //sets the index analyzer 
"analyzer":"analyzer_name" // sets both search and index 
"search_analyzer":"...." // sets the search analyzer. 
+0

我認爲這是分析索引,而不是搜索。 – eric

+1

「分析儀」:{搜索和索引分析儀} 「index_analyzer」:{index only} 「search_analyzer」:{僅限搜索} –