Skip to content

Instantly share code, notes, and snippets.

@codesnik
Created November 1, 2016 16:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codesnik/be412c6ab3469d74971d3e38496012c9 to your computer and use it in GitHub Desktop.
Save codesnik/be412c6ab3469d74971d3e38496012c9 to your computer and use it in GitHub Desktop.
---
name: example-DIH-db
version: 1.6
uniqueKey: id
fieldTypes:
- name: alphaOnlySort
class: solr.TextField
omitNorms: true
sortMissingLast: true
analyzer:
tokenizer:
class: solr.KeywordTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.TrimFilterFactory
- class: solr.PatternReplaceFilterFactory
pattern: "([^a-z])"
replace: all
replacement: ''
- name: ancestor_path
class: solr.TextField
indexAnalyzer:
tokenizer:
class: solr.KeywordTokenizerFactory
queryAnalyzer:
tokenizer:
class: solr.PathHierarchyTokenizerFactory
delimiter: "/"
- name: binary
class: solr.BinaryField
- name: boolean
class: solr.BoolField
sortMissingLast: true
- name: currency
class: solr.CurrencyField
currencyConfig: currency.xml
defaultCurrency: USD
precisionStep: '8'
- name: date
class: solr.TrieDateField
positionIncrementGap: '0'
precisionStep: '0'
- name: descendent_path
class: solr.TextField
indexAnalyzer:
tokenizer:
class: solr.PathHierarchyTokenizerFactory
delimiter: "/"
queryAnalyzer:
tokenizer:
class: solr.KeywordTokenizerFactory
- name: double
class: solr.TrieDoubleField
positionIncrementGap: '0'
precisionStep: '0'
- name: float
class: solr.TrieFloatField
positionIncrementGap: '0'
precisionStep: '0'
- name: ignored
class: solr.StrField
indexed: false
stored: false
multiValued: true
- name: int
class: solr.TrieIntField
positionIncrementGap: '0'
precisionStep: '0'
- name: location
class: solr.LatLonType
subFieldSuffix: _coordinate
- name: location_rpt
class: solr.SpatialRecursivePrefixTreeFieldType
geo: 'true'
maxDistErr: '0.001'
distErrPct: '0.025'
distanceUnits: kilometers
- name: long
class: solr.TrieLongField
positionIncrementGap: '0'
precisionStep: '0'
- name: lowercase
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.KeywordTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- name: payloads
class: solr.TextField
indexed: true
stored: false
analyzer:
tokenizer:
class: solr.WhitespaceTokenizerFactory
filters:
- class: solr.DelimitedPayloadTokenFilterFactory
encoder: float
- name: phonetic
class: solr.TextField
indexed: true
stored: false
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.DoubleMetaphoneFilterFactory
inject: 'false'
- name: point
class: solr.PointType
subFieldSuffix: _d
dimension: '2'
- name: random
class: solr.RandomSortField
indexed: true
- name: string
class: solr.StrField
sortMissingLast: true
- name: tdate
class: solr.TrieDateField
positionIncrementGap: '0'
precisionStep: '6'
- name: tdouble
class: solr.TrieDoubleField
positionIncrementGap: '0'
precisionStep: '8'
- name: text_ar
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_ar.txt
ignoreCase: 'true'
- class: solr.ArabicNormalizationFilterFactory
- class: solr.ArabicStemFilterFactory
- name: text_bg
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_bg.txt
ignoreCase: 'true'
- class: solr.BulgarianStemFilterFactory
- name: text_ca
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.ElisionFilterFactory
articles: lang/contractions_ca.txt
ignoreCase: 'true'
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_ca.txt
ignoreCase: 'true'
- class: solr.SnowballPorterFilterFactory
language: Catalan
- name: text_cjk
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.CJKWidthFilterFactory
- class: solr.LowerCaseFilterFactory
- class: solr.CJKBigramFilterFactory
- name: text_ckb
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.SoraniNormalizationFilterFactory
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_ckb.txt
ignoreCase: 'true'
- class: solr.SoraniStemFilterFactory
- name: text_cz
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_cz.txt
ignoreCase: 'true'
- class: solr.CzechStemFilterFactory
- name: text_da
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
format: snowball
words: lang/stopwords_da.txt
ignoreCase: 'true'
- class: solr.SnowballPorterFilterFactory
language: Danish
- name: text_de
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
format: snowball
words: lang/stopwords_de.txt
ignoreCase: 'true'
- class: solr.GermanNormalizationFilterFactory
- class: solr.GermanLightStemFilterFactory
- name: text_el
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.GreekLowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_el.txt
ignoreCase: 'false'
- class: solr.GreekStemFilterFactory
- name: text_en
class: solr.TextField
positionIncrementGap: '100'
indexAnalyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.StopFilterFactory
words: lang/stopwords_en.txt
ignoreCase: 'true'
- class: solr.LowerCaseFilterFactory
- class: solr.EnglishPossessiveFilterFactory
- class: solr.KeywordMarkerFilterFactory
protected: protwords.txt
- class: solr.PorterStemFilterFactory
queryAnalyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.SynonymFilterFactory
expand: 'true'
ignoreCase: 'true'
synonyms: synonyms.txt
- class: solr.StopFilterFactory
words: lang/stopwords_en.txt
ignoreCase: 'true'
- class: solr.LowerCaseFilterFactory
- class: solr.EnglishPossessiveFilterFactory
- class: solr.KeywordMarkerFilterFactory
protected: protwords.txt
- class: solr.PorterStemFilterFactory
- name: text_en_splitting
class: solr.TextField
autoGeneratePhraseQueries: 'true'
positionIncrementGap: '100'
indexAnalyzer:
tokenizer:
class: solr.WhitespaceTokenizerFactory
filters:
- class: solr.StopFilterFactory
words: lang/stopwords_en.txt
ignoreCase: 'true'
- class: solr.WordDelimiterFilterFactory
catenateNumbers: '1'
generateNumberParts: '1'
splitOnCaseChange: '1'
generateWordParts: '1'
catenateAll: '0'
catenateWords: '1'
- class: solr.LowerCaseFilterFactory
- class: solr.KeywordMarkerFilterFactory
protected: protwords.txt
- class: solr.PorterStemFilterFactory
queryAnalyzer:
tokenizer:
class: solr.WhitespaceTokenizerFactory
filters:
- class: solr.SynonymFilterFactory
expand: 'true'
ignoreCase: 'true'
synonyms: synonyms.txt
- class: solr.StopFilterFactory
words: lang/stopwords_en.txt
ignoreCase: 'true'
- class: solr.WordDelimiterFilterFactory
catenateNumbers: '0'
generateNumberParts: '1'
splitOnCaseChange: '1'
generateWordParts: '1'
catenateAll: '0'
catenateWords: '0'
- class: solr.LowerCaseFilterFactory
- class: solr.KeywordMarkerFilterFactory
protected: protwords.txt
- class: solr.PorterStemFilterFactory
- name: text_en_splitting_tight
class: solr.TextField
autoGeneratePhraseQueries: 'true'
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.WhitespaceTokenizerFactory
filters:
- class: solr.SynonymFilterFactory
expand: 'false'
ignoreCase: 'true'
synonyms: synonyms.txt
- class: solr.StopFilterFactory
words: lang/stopwords_en.txt
ignoreCase: 'true'
- class: solr.WordDelimiterFilterFactory
catenateNumbers: '1'
generateNumberParts: '0'
generateWordParts: '0'
catenateAll: '0'
catenateWords: '1'
- class: solr.LowerCaseFilterFactory
- class: solr.KeywordMarkerFilterFactory
protected: protwords.txt
- class: solr.EnglishMinimalStemFilterFactory
- class: solr.RemoveDuplicatesTokenFilterFactory
- name: text_es
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
format: snowball
words: lang/stopwords_es.txt
ignoreCase: 'true'
- class: solr.SpanishLightStemFilterFactory
- name: text_eu
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_eu.txt
ignoreCase: 'true'
- class: solr.SnowballPorterFilterFactory
language: Basque
- name: text_fa
class: solr.TextField
positionIncrementGap: '100'
analyzer:
charFilters:
- class: solr.PersianCharFilterFactory
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.ArabicNormalizationFilterFactory
- class: solr.PersianNormalizationFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_fa.txt
ignoreCase: 'true'
- name: text_fi
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
format: snowball
words: lang/stopwords_fi.txt
ignoreCase: 'true'
- class: solr.SnowballPorterFilterFactory
language: Finnish
- name: text_fr
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.ElisionFilterFactory
articles: lang/contractions_fr.txt
ignoreCase: 'true'
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
format: snowball
words: lang/stopwords_fr.txt
ignoreCase: 'true'
- class: solr.FrenchLightStemFilterFactory
- name: text_ga
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.ElisionFilterFactory
articles: lang/contractions_ga.txt
ignoreCase: 'true'
- class: solr.StopFilterFactory
words: lang/hyphenations_ga.txt
ignoreCase: 'true'
- class: solr.IrishLowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_ga.txt
ignoreCase: 'true'
- class: solr.SnowballPorterFilterFactory
language: Irish
- name: text_general
class: solr.TextField
positionIncrementGap: '100'
indexAnalyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.StopFilterFactory
words: stopwords.txt
ignoreCase: 'true'
- class: solr.LowerCaseFilterFactory
queryAnalyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.StopFilterFactory
words: stopwords.txt
ignoreCase: 'true'
- class: solr.SynonymFilterFactory
expand: 'true'
ignoreCase: 'true'
synonyms: synonyms.txt
- class: solr.LowerCaseFilterFactory
- name: text_general_rev
class: solr.TextField
positionIncrementGap: '100'
indexAnalyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.StopFilterFactory
words: stopwords.txt
ignoreCase: 'true'
- class: solr.LowerCaseFilterFactory
- class: solr.ReversedWildcardFilterFactory
maxPosQuestion: '2'
maxFractionAsterisk: '0.33'
maxPosAsterisk: '3'
withOriginal: 'true'
queryAnalyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.SynonymFilterFactory
expand: 'true'
ignoreCase: 'true'
synonyms: synonyms.txt
- class: solr.StopFilterFactory
words: stopwords.txt
ignoreCase: 'true'
- class: solr.LowerCaseFilterFactory
- name: text_gl
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_gl.txt
ignoreCase: 'true'
- class: solr.GalicianStemFilterFactory
- name: text_hi
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.IndicNormalizationFilterFactory
- class: solr.HindiNormalizationFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_hi.txt
ignoreCase: 'true'
- class: solr.HindiStemFilterFactory
- name: text_hu
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
format: snowball
words: lang/stopwords_hu.txt
ignoreCase: 'true'
- class: solr.SnowballPorterFilterFactory
language: Hungarian
- name: text_hy
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_hy.txt
ignoreCase: 'true'
- class: solr.SnowballPorterFilterFactory
language: Armenian
- name: text_id
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_id.txt
ignoreCase: 'true'
- class: solr.IndonesianStemFilterFactory
stemDerivational: 'true'
- name: text_it
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.ElisionFilterFactory
articles: lang/contractions_it.txt
ignoreCase: 'true'
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
format: snowball
words: lang/stopwords_it.txt
ignoreCase: 'true'
- class: solr.ItalianLightStemFilterFactory
- name: text_ja
class: solr.TextField
autoGeneratePhraseQueries: 'false'
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.JapaneseTokenizerFactory
mode: search
filters:
- class: solr.JapaneseBaseFormFilterFactory
- class: solr.JapanesePartOfSpeechStopFilterFactory
tags: lang/stoptags_ja.txt
- class: solr.CJKWidthFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_ja.txt
ignoreCase: 'true'
- class: solr.JapaneseKatakanaStemFilterFactory
minimumLength: '4'
- class: solr.LowerCaseFilterFactory
- name: text_lv
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_lv.txt
ignoreCase: 'true'
- class: solr.LatvianStemFilterFactory
- name: text_nl
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
format: snowball
words: lang/stopwords_nl.txt
ignoreCase: 'true'
- class: solr.StemmerOverrideFilterFactory
dictionary: lang/stemdict_nl.txt
ignoreCase: 'false'
- class: solr.SnowballPorterFilterFactory
language: Dutch
- name: text_no
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
format: snowball
words: lang/stopwords_no.txt
ignoreCase: 'true'
- class: solr.SnowballPorterFilterFactory
language: Norwegian
- name: text_pt
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
format: snowball
words: lang/stopwords_pt.txt
ignoreCase: 'true'
- class: solr.PortugueseLightStemFilterFactory
- name: text_ro
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_ro.txt
ignoreCase: 'true'
- class: solr.SnowballPorterFilterFactory
language: Romanian
- name: text_ru
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
format: snowball
words: lang/stopwords_ru.txt
ignoreCase: 'true'
- class: solr.SnowballPorterFilterFactory
language: Russian
- name: text_sv
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
format: snowball
words: lang/stopwords_sv.txt
ignoreCase: 'true'
- class: solr.SnowballPorterFilterFactory
language: Swedish
- name: text_th
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.ThaiTokenizerFactory
filters:
- class: solr.LowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_th.txt
ignoreCase: 'true'
- name: text_tr
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.StandardTokenizerFactory
filters:
- class: solr.ApostropheFilterFactory
- class: solr.TurkishLowerCaseFilterFactory
- class: solr.StopFilterFactory
words: lang/stopwords_tr.txt
ignoreCase: 'false'
- class: solr.SnowballPorterFilterFactory
language: Turkish
- name: text_ws
class: solr.TextField
positionIncrementGap: '100'
analyzer:
tokenizer:
class: solr.WhitespaceTokenizerFactory
- name: tfloat
class: solr.TrieFloatField
positionIncrementGap: '0'
precisionStep: '8'
- name: tint
class: solr.TrieIntField
positionIncrementGap: '0'
precisionStep: '8'
- name: tlong
class: solr.TrieLongField
positionIncrementGap: '0'
precisionStep: '8'
fields:
- name: _root_
type: string
indexed: true
stored: false
- name: _version_
type: long
indexed: true
stored: true
- name: author
type: text_general
indexed: true
stored: true
- name: cat
type: string
multiValued: true
indexed: true
stored: true
- name: category
type: text_general
indexed: true
stored: true
- name: comments
type: text_general
indexed: true
stored: true
- name: content
type: text_general
multiValued: true
indexed: false
stored: true
- name: content_type
type: string
multiValued: true
indexed: true
stored: true
- name: description
type: text_general
indexed: true
stored: true
- name: features
type: text_general
multiValued: true
indexed: true
stored: true
- name: id
type: string
multiValued: false
indexed: true
required: true
stored: true
- name: inStock
type: boolean
indexed: true
stored: true
- name: includes
type: text_general
termPositions: true
termVectors: true
indexed: true
termOffsets: true
stored: true
- name: keywords
type: text_general
indexed: true
stored: true
- name: last_modified
type: date
indexed: true
stored: true
- name: links
type: string
multiValued: true
indexed: true
stored: true
- name: manu
type: text_general
omitNorms: true
indexed: true
stored: true
- name: manu_exact
type: string
indexed: true
stored: false
- name: name
type: text_general
indexed: true
stored: true
- name: payloads
type: payloads
indexed: true
stored: true
- name: popularity
type: int
indexed: true
stored: true
- name: price
type: float
indexed: true
stored: true
- name: resourcename
type: text_general
indexed: true
stored: true
- name: sku
type: text_en_splitting_tight
omitNorms: true
indexed: true
stored: true
- name: store
type: location
indexed: true
stored: true
- name: subject
type: text_general
indexed: true
stored: true
- name: text
type: text_general
multiValued: true
indexed: true
stored: false
- name: text_rev
type: text_general_rev
multiValued: true
indexed: true
stored: false
- name: title
type: text_general
multiValued: true
indexed: true
stored: true
- name: url
type: text_general
indexed: true
stored: true
- name: weight
type: float
indexed: true
stored: true
dynamicFields:
- name: "*_coordinate"
type: tdouble
indexed: true
stored: false
- name: ignored_*
type: ignored
multiValued: true
- name: random_*
type: random
- name: attr_*
type: text_general
multiValued: true
indexed: true
stored: true
- name: "*_txt"
type: text_general
multiValued: true
indexed: true
stored: true
- name: "*_dts"
type: date
multiValued: true
indexed: true
stored: true
- name: "*_tdt"
type: tdate
indexed: true
stored: true
- name: "*_is"
type: int
multiValued: true
indexed: true
stored: true
- name: "*_ss"
type: string
multiValued: true
indexed: true
stored: true
- name: "*_ls"
type: long
multiValued: true
indexed: true
stored: true
- name: "*_en"
type: text_en
multiValued: true
indexed: true
stored: true
- name: "*_bs"
type: boolean
multiValued: true
indexed: true
stored: true
- name: "*_fs"
type: float
multiValued: true
indexed: true
stored: true
- name: "*_ds"
type: double
multiValued: true
indexed: true
stored: true
- name: "*_dt"
type: date
indexed: true
stored: true
- name: "*_ti"
type: tint
indexed: true
stored: true
- name: "*_tl"
type: tlong
indexed: true
stored: true
- name: "*_tf"
type: tfloat
indexed: true
stored: true
- name: "*_td"
type: tdouble
indexed: true
stored: true
- name: "*_i"
type: int
indexed: true
stored: true
- name: "*_s"
type: string
indexed: true
stored: true
- name: "*_l"
type: long
indexed: true
stored: true
- name: "*_t"
type: text_general
indexed: true
stored: true
- name: "*_b"
type: boolean
indexed: true
stored: true
- name: "*_f"
type: float
indexed: true
stored: true
- name: "*_d"
type: double
indexed: true
stored: true
- name: "*_p"
type: location
indexed: true
stored: true
- name: "*_c"
type: currency
indexed: true
stored: true
copyFields:
- source: author
dest: text
- source: cat
dest: text
- source: content
dest: text
- source: content_type
dest: text
- source: description
dest: text
- source: features
dest: text
- source: includes
dest: text
- source: keywords
dest: text
- source: manu
dest: manu_exact
- source: manu
dest: text
- source: name
dest: text
- source: resourcename
dest: text
- source: title
dest: text
- source: url
dest: text
- source: price
dest: price_c
- source: author
dest: author_s
require 'rsolr'
class RSolr::SchemaUpdater
class Error < StandardError; end
OPS_ORDER = %W[
add-field-type
replace-field-type
delete-copy-field
add-field
replace-field
delete-field
add-dynamic-field
replace-dynamic-field
delete-dynamic-field
add-copy-field
delete-field-type
]
def initialize(rsolr:, current_schema: nil)
@rsolr = rsolr
@current_schema = current_schema
end
attr_accessor :rsolr
attr_writer :current_schema
def update!( wanted_schema:, dry_run: false )
sectioned_ops = {
'field-type' => add_replace_delete(current_schema, wanted_schema, "fieldTypes"),
'field' => add_replace_delete(current_schema, wanted_schema, "fields"),
'dynamic-field' => add_replace_delete(current_schema, wanted_schema,"dynamicFields"),
'copy-field' => add_delete_copies(current_schema, wanted_schema)
}
commands = {}
sectioned_ops.each do |postfix, ops|
ops.each do |op, fields|
commands["#{op}-#{postfix}"] = fields unless fields == []
end
end
# json hashes should be unordered, but Solr has it's own ideas
commands = reorder_hash(commands, OPS_ORDER)
result = rsolr.post('schema', headers: {'Content-Type' => 'application/json'},
data: commands.to_json) unless dry_run
fail Error, result["errors"] if !dry_run && result["errors"]
commands unless commands == {}
end
def current_schema
@current_schema ||= rsolr.get('schema')["schema"]
end
def reset_current_schema!
@current_schema = nil
end
private
def add_replace_delete(current, wanted, section)
current = current[section].map {|record| [record["name"], record] }.to_h
wanted = wanted[section].map {|record| [record["name"], record] }.to_h
add_keys = wanted.keys - current.keys
add = wanted.values_at(*add_keys)
replace_keys = (current.keys & wanted.keys).select {|key| current[key] != wanted[key] }
replace = wanted.values_at(*replace_keys)
delete_keys = current.keys - wanted.keys
delete = delete_keys.map {|key| {"name" => key} }
{add: add, replace: replace, delete: delete}
end
def add_delete_copies(current, wanted)
current = current["copyFields"]
wanted = wanted["copyFields"]
{add: wanted - current, delete: current - wanted}
end
def reorder_hash(hash, order)
order &= hash.keys
order.zip(hash.values_at(*order)).to_h
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment