代码之家  ›  专栏  ›  技术社区  ›  sharath

ElasticSearch:在不添加索引映射的情况下测试自定义分析器

  •  0
  • sharath  · 技术社区  · 8 年前

    我可以测试一个定制的ElasticSearch分析器/标记器而不首先将其添加到索引中吗? 比如:

    GET _analyze
    {
      "tokenizer": {
            "my_custom_tokenizer": {
              "type": "edge_ngram",
              "min_gram": 2,
              "max_gram": 10,
              "token_chars": [
              "letter", "digit", "symbol"
    
              ]
            }
          },
      "text" : "this is a test"
    }
    

    我可以先在索引中添加一个新的分析器来测试它。-

    curl -X PUT "localhost:9200/my_index" -H 'Content-Type: application/json' -d'
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_custom_analyzer": {
              "tokenizer": "my_custom_tokenizer"
            }
          },
          "tokenizer": {
            "my_custom_tokenizer": {
              "type": "edgeNGram",
              "min_gram": 1,
              "max_gram": 30,
              "token_chars": [
              "letter", "digit", "symbol", "punctuation", "whitespace"
    
              ]
            }
          }
        }
      }
    }
    '
    

    然后这样做-

    curl -X POST "localhost:9200/my_index/_analyze" -H 'Content-Type: application/json' -d'
    {
      "analyzer": "my_custom_analyzer",
      "text": "testing"
    }
    '
    

    我可以避免这个两步流程吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Lewis Briffa    8 年前

    据我所知,旧版本的ElasticSearch(如2.x)不支持这种复杂的数组/对象分析,但新版本(如5.x和更高版本)肯定支持。

    您的现有JSON请求就快到了,只需删除“my-custom-tokenizer”对象,同时保持其当前配置如下:

    {
      "tokenizer" : {
        "type": "edge_ngram", 
        "min_gram": 2, 
        "max_gram": 10, 
        "token_chars": ["letter", "digit", "symbol"]
      },
    
      "text" : "this is a test"
    }