1

ローカルの1.7.5 Elasticsearchインストールでこれを試しています

http://localhost:9200/_analyze?filter=shingle&tokenizer=keyword&text=alkis stack

私はこれを見る

{
   "tokens":[
      {
         "token":"alkis stack",
         "start_offset":0,
         "end_offset":11,
         "type":"word",
         "position":1
      }
   ]
}

そして、私はこのようなものを見ることを期待していました

{
   "tokens":[
      {
         "token":"alkis stack",
         "start_offset":0,
         "end_offset":11,
         "type":"word",
         "position":1
      },
      {
         "token":"stack alkis",
         "start_offset":0,
         "end_offset":11,
         "type":"word",
         "position":1
      }
   ]
}

何か不足していますか?

アップデート

{
  "number_of_shards": 2,
  "number_of_replicas": 0,
  "analysis": {
    "char_filter": {
      "map_special_chars": {
        "type": "mapping",
        "mappings": [
          "- => \\u0020",
          ". => \\u0020",
          "? => \\u0020",
          ", => \\u0020",
          "` => \\u0020",
          "' => \\u0020",
          "\" => \\u0020"
        ]
      }
    },
    "filter": {
      "permutate_fullname": {
        "type": "shingle",
        "max_shingle_size": 4,
        "min_shingle_size": 2,
        "output_unigrams": true,
        "token_separator": " ",
        "filler_token": "_"
      }
    },
    "analyzer": {
      "fullname_analyzer_search": {
        "char_filter": [
          "map_special_chars"
        ],
        "filter": [
          "asciifolding",
          "lowercase",
          "trim"
        ],
        "type": "custom",
        "tokenizer": "keyword"
      },
      "fullname_analyzer_index": {
        "char_filter": [
          "map_special_chars"
        ],
        "filter": [
          "asciifolding",
          "lowercase",
          "trim",
          "permutate_fullname"
        ],
        "type": "custom",
        "tokenizer": "keyword"
      }
    }
  }
}

そして、私はこのようにテストしようとしています

http://localhost:9200/INDEX_NAME/_analyze?analyzer=fullname_analyzer_index&text=alkis stack
4

1 に答える 1

1

DB にあるのと同じように、ES の2 つの別々のフィールドで名と姓にインデックスを付けます。クエリとして受け取ったテキストを分析できます (matchたとえば、 does it、 query_stringdoes it)。また、検索文字列内のすべての用語を使用して、両方のフィールドを同時に検索する方法もあります。一度に単一の名前を使用してユースケースを過度に複雑にし、インデックス作成時に名前の順列を作成していると思います。

于 2016-07-21T21:09:43.690 に答える