2015-06-03 2 views
1
PUT /new_index/ 
{ 
    "settings": { 
     "index": { 
      "type": "default" 
     }, 
     "number_of_shards": 5, 
     "number_of_replicas": 1, 
     "analysis": { 
      "filter": { 
       "ap_stop": { 
        "type": "stop", 
        "stopwords_path": "stoplist.txt" 
       }, 
       "shingle_filter" : { 
        "type" : "shingle", 
        "min_shingle_size" : 2, 
        "max_shingle_size" : 5, 
        "output_unigrams": true 
       } 
      }, 
     "analyzer": { 
      "aplyzer": { 
       "type": "custom", 
       "tokenizer": "standard", 
       "filter": ["standard", 
          "ap_stop", 
          "lowercase", 
          "shingle_filter", 
          "snowball"] 
       } 
      } 
     } 
    } 
} 

PUT /new_index/document/_mapping/ 
{ 
    "document": { 
     "properties": { 
      "text": { 
       "type": "string", 
       "store": true, 
       "index": "analyzed", 
       "term_vector": "with_positions_offsets_payloads", 
       "search_analyzer": "aplyzer", 
       "index_analyzer": "aplyzer" 
      }, 
      "original_text": { 
       "include_in_all": false, 
       "type": "string", 
       "store": false, 
       "index": "not_analyzed" 
      }, 
      "docid": { 
       "include_in_all": false, 
       "type": "string", 
       "store": true, 
       "index": "not_analyzed" 
      } 
     } 
    } 
} 

Мне нужно преобразовать вышеуказанный индекс settings и mappings в тип, принятый согласно elastic4s. Я использую последние elastic4s и elasticsearch 1.5.2.Как написать отображение/настройки для индекса с помощью elastic4s?

Я прошел через несколько примеров, приведенных в документации, но я не могу понять, как сделать это, как я пытался создать его таким образом:

client.execute { 
    create index "new_index" mappings { 
     "documents" as (
     "text" typed StringType analyzer ... 
     ) 
    } 
    } 

Я не могу понять, как использовать store, index , term_vectors и т. Д., Как указано в запросе PUT.

UPDATE: На основании ответа я был в состоянии сделать этот вид вещи:

create index "new_index" shards 5 replicas 1 refreshInterval "90s" mappings { 
    "documents" as(
     id typed StringType analyzer KeywordAnalyzer store true includeInAll false, 
     "docid" typed StringType index "not_analyzed" store true includeInAll false, 
     "original_text" typed StringType index "not_analyzed" includeInAll false, 
     "text" typed StringType analyzer CustomAnalyzer("aplyzer") indexAnalyzer "aplyzer" searchAnalyzer "aplyzer" store true termVector WithPositionsOffsetsPayloads 
    ) 
    } analysis (
    CustomAnalyzerDefinition(
     "aplyzer", 
     StandardTokenizer, 
     LowercaseTokenFilter, 
     shingle tokenfilter "shingle_filter" minShingleSize 2 maxShingleSize 5 outputUnigrams true 
    ) 
) 

, что я не могу понять теперь, как добавить снежок стеммер и остановить слова путь к файлу aplyzer анализатор?

Как мне это сделать?

ответ

1

Основываясь на том, что @monkjack предложил и то, что я читал из документации elastic4s «s я наконец придумал следующие ответы на какие параметры индекса и отображений будет выглядеть при использовании с elastic4s. Пройдите через tests, который автор написал для API.

create index "new_index" shards 5 replicas 1 refreshInterval "90s" mappings { 
    "documents" as(
     id 
     typed StringType 
     analyzer KeywordAnalyzer 
     store true 
     includeInAll false, 
     "docid" 
     typed StringType 
     index "not_analyzed" 
     store true 
     includeInAll false, 
     "original_text" 
     typed StringType 
     index "not_analyzed" 
     includeInAll false, 
     "text" 
     typed StringType 
     analyzer CustomAnalyzer("aplyzer") 
     indexAnalyzer "aplyzer" 
     searchAnalyzer "aplyzer" 
     store true 
     termVector WithPositionsOffsetsPayloads 
    ) 
    } analysis (
    CustomAnalyzerDefinition(
     "aplyzer", 
     StandardTokenizer, 
     LowercaseTokenFilter, 
     NamedStopTokenFilter("ap_stop", "_english_", true, true), 
     shingle 
     tokenfilter "shingle_filter" 
     minShingleSize 2 
     maxShingleSize 5 
     outputUnigrams true 
     outputUnigramsIfNoShingles true, 
     snowball 
     tokenfilter "ap_snowball" 
     lang "English" 
    ) 
) 

Использование StopTokenFilter("ap_stop", stopwords = Set("a", "an", "the")) вместо NamedStopTokenFilter, если вы хотите, чтобы дать свой собственный список стоп-слов.

При запуске GET new_index я получаю следующую настройку/отображение.

{ 
    "new_index": { 
     "aliases": {}, 
     "mappings": { 
     "documents": { 
      "properties": { 
       "docid": { 
        "type": "string", 
        "index": "not_analyzed", 
        "store": true, 
        "include_in_all": false 
       }, 
       "original_text": { 
        "type": "string", 
        "index": "not_analyzed", 
        "include_in_all": false 
       }, 
       "text": { 
        "type": "string", 
        "store": true, 
        "term_vector": "with_positions_offsets_payloads", 
        "analyzer": "aplyzer" 
       } 
      } 
     } 
     }, 
     "settings": { 
     "index": { 
      "creation_date": "1433383476240", 
      "uuid": "6PmqlY6FRPanGtVSsGy3Jw", 
      "analysis": { 
       "analyzer": { 
        "aplyzer": { 
        "type": "custom", 
        "filter": [ 
         "lowercase", 
         "ap_stop", 
         "shingle_filter", 
         "ap_snowball" 
        ], 
        "tokenizer": "standard" 
        } 
       }, 
       "filter": { 
        "ap_stop": { 
        "enable_position_increments": "true", 
        "ignore_case": "true", 
        "type": "stop", 
        "stopwords": "_english_" 
        }, 
        "shingle_filter": { 
        "output_unigrams_if_no_shingles": "true", 
        "token_separator": " ", 
        "max_shingle_size": "5", 
        "type": "shingle", 
        "min_shingle_size": "2", 
        "filler_token": "_", 
        "output_unigrams": "true" 
        }, 
        "ap_snowball": { 
        "type": "snowball", 
        "language": "English" 
        } 
       } 
      }, 
      "number_of_replicas": "1", 
      "number_of_shards": "5", 
      "refresh_interval": "90s", 
      "version": { 
       "created": "1050299" 
      } 
     } 
     }, 
     "warmers": {} 
    } 
} 

Если вы хотите StopWords и Stemmers как отдельных анализаторов, а @monkjack предложил просто добавить SnowballAnalyzerDefinition и StopAnalyzerDefinition как:

....outputUnigramsIfNoShingles true, 
    ), 
    SnowballAnalyzerDefinition("ap_snowball", "English"), 
    StopAnalyzerDefinition("ap_stop", stopwords = Set("a", "an", "the")) 
) 
1

Ваше название спрашивает о пользовательских фильтрах, но ваш вопрос спрашивает о store, index и term_vectors. Я объясню это последним.

client.execute { 
    create index "myindex" mappings { 
     "mytype" as (
     "myfield" typed StringType store true termVector termVector.WithOffsets index "not_analyzed" 
     ) 
    ) 
    } 
    } 

Update:

на основе обновленной вопрос. Документация elasticsearch неясна, если вы можете установить стоп-слова на фильтр токена снежного комбайна. Вы можете использовать анализатор снежного кома.

Таким образом, либо

SnowballAnalyzerDefinition("mysnowball", "English", stopwords = Set("I", "he", "the")) 

или

CustomAnalyzerDefinition("mysnowball", 
    StandardTokenizer, 
    LowercaseTokenFilter, 
    snowball tokenfilter "snowball1" language "German" 
) 
+0

Я был в состоянии сделать это, глядя на тестовых сценариев в источнике.Одна вещь, которую я хочу подтвердить, - это тип 'term_vector', который является' with_positions_offsets_payloads', и я думаю, что в моей версии у меня его нет. Должен ли он быть добавлен в 'domain.scala' как' case-объект WithPositionsOffsetsPayloads расширяет TermVector ("with_positions_offsets_payloads") '? –

+0

Да, этого нет, я только что добавил его к мастеру. – monkjack

+0

Спасибо, я уточню оттуда. –