bugfix> elasticsearch > 投稿

ESの新規およびドキュメント(https://www.elastic.co/guide/en/elasticsearch/guide/current/languages.html)さまざまな分析ツールを使用して人間の言語に対処することについて。いくつかの例を実行すると、追加されたアナライザーが検索にまったく影響を与えていないように見えます。例えば。

## init some index for testing
PUT /testindex
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 3,
    "analysis": {},
    "refresh_interval": "1s"
  },
  "mappings": {
    "testtype": {
      "properties": {
        "title": {
          "type": "text",
          "analyzer": "english"
        }
      }
    }
  }
}
## adding some analyzers for...
POST /testindex/_close
##... simple lowercase tokenization, ...(https://www.elastic.co/guide/en/elasticsearch/guide/current/lowercase-token-filter.html#lowercase-token-filter)
PUT /testindex/_settings
{
    "analysis": {
      "analyzer": {
        "my_lowercaser": {
          "tokenizer": "standard",
          "filter":  [ "lowercase" ]
        }
      }
    }
}
## ... normalization (https://www.elastic.co/guide/en/elasticsearch/guide/current/algorithmic-stemmers.html#_using_an_algorithmic_stemmer), ...
PUT testindex/_settings
{
  "analysis": {
    "filter": {
      "english_stop": {
        "type":       "stop",
        "stopwords":  "_english_"
      },
      "light_english_stemmer": {
        "type":       "stemmer",
        "language":   "light_english" 
      },
      "english_possessive_stemmer": {
        "type":       "stemmer",
        "language":   "possessive_english"
      }
    },
    "analyzer": {
      "english": {
        "tokenizer": "standard",
        "filter": [
          "english_possessive_stemmer",
          "lowercase",
          "english_stop",
          "light_english_stemmer", 
          "asciifolding" 
        ]
      }
    }
  }
}
## ... and using a hunspell dictionary (https://www.elastic.co/guide/en/elasticsearch/guide/current/hunspell.html#hunspell)
PUT testindex/_settings
{
  "analysis": {
    "filter": {
      "en_US": {
        "type":     "hunspell",
        "language": "en_US" 
      }
    },
    "analyzer": {
      "en_US": {
        "tokenizer":  "standard",
        "filter":   [ 
          "lowercase", 
          "en_US" 
          ]
      }
    }
  }
}
POST /testindex/_open
GET testindex/_settings
## it appears as though the analyzers have been added without problem
## adding some testing data
POST /testindex/testtype
{
  "title": "Will the root word of movement be found?"
}
POST /testindex/testtype
{
  "title": "That's why I never want to hear you say, ehhh I waant it thaaat away."
}
## expecting to match against root word of movement (move)
GET /testindex/testtype/_search
{
  "query": {
    "match": {
      "title": "moving"
    }
  }
}
## which returns 0 hits, as shown below
{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}
## ... yet I can see that the record expected does in fact exist in the index when using...
GET /testindex/testtype/_search
{
  "query": {
    "match_all": {}
  }
}

そのとき、私は実際に「追加「(新しい)フィールドへのアナライザー、私は次のことを行います(それでも否定的な結果が表示されます)

# adding the analyzers to a new field
POST /testindex/testtype
{
  "mappings": {
      "properties": {
        "title2": {
          "type": "text",
          "analyzer": [
            "my_lowercaser",
            "english",
            "en_US"
            ]
        }
      }
  }
}
# looking at the tokens I'd expect to be able to find
GET /testindex/_analyze
{
  "analyzer": "en_US", 
  "text": "Moving between directories"
}
# moving, move, between, directory
# what I actually see
GET /testindex/_analyze
{
  "field": "title2", 
  "text": "Moving between directories"
}
# moving, between, directories

もっとシンプルなものを試してみる

POST /testindex/testtype
    {
      "mappings": {
          "properties": {
            "title2": {
              "type": "text",
              "analyzer": "en_US"
            }
          }
      }
    }

まったく役に立ちません。

だから、これは非常に混乱しているようです。これらのアナライザーがどのように機能するかについてここに何かが欠けていますか?これらのアナライザーは(提供された情報に基づいて)適切に動作する必要がありますか?ここで単純に誤用していますか?もしそうなら、誰かが実際に動作/ヒットするクエリの例を提供できますか?

**ここに追加すべき他のデバッグ情報はありますか?

回答 1 件
  • title2  フィールドには3つのアナライザーがありますが、出力( analyze  エンドポイント) my_lowercaser のみ  適用されます。

    最後に、 hunspell で私のために働いた設定  は:

    "settings": {
        "analysis": {
          "filter": {
            "en_US": {
              "type":     "hunspell",
              "language": "en_US" 
            }
          },
          "analyzer": {
            "en_US": {
              "tokenizer":  "standard",
              "filter":   [ "lowercase", "en_US" ]
            }
          }
        }
      }
    "mappings": {
        "_doc": {
          "properties": {
            "title-en-us": {
              "type": "text",
              "analyzer": "en_US"
            }
          }
        }
      }
    
    

    movement   move に解決されない  一方、 moving  is(おそらく hunspell  辞書関連)。 move を使用したクエリ   moving のドキュメントが作成されました  のみ、しかし movement

あなたの答え