defmodule Something.Schema do # @moduledoc false use ESx.Schema # @derive [Poison.Encoder, except: [:id]] defstruct [:id, :title] mapping do indexes :title, type: "string", analyzer: "ngram_analyzer", search_analyzer: "ngram_analyzer" indexes :content, type: "string", analyzer: "ngram_analyzer", search_analyzer: "ngram_analyzer" end settings do analysis do analyzer :ngram_analyzer, tokenizer: "ngram_tokenizer", char_filter: ["html_strip", "kuromoji_neologd_iteration_mark"], filter: ["lowercase", "kuromoji_neologd_stemmer", "cjk_width"] tokenizer :ngram_tokenizer, type: "nGram", min_gram: "2", max_gram: "3", token_chars: ["letter", "digit"] end end # mapping [ # _ttl: [ # enabled: "true", # default: "180d" # ], # _all: [ # enabled: false # ], # properties: [ # title: [ # type: "string", # search_analyzer: "ngram_analyzer", # analyzer: "ngram_analyzer" # ], # content: [ # type: "string", # search_analyzer: "ngram_analyzer", # analyzer: "ngram_analyzer" # ] # ] # ] # settings [ # analysis: [ # tokenizer: [ # ngram_tokenizer: [ # type: "nGram", # token_chars: [ # "letter", # "digit" # ], # min_gram: "2", # max_gram: "3" # ] # ], # analyzer: [ # ngram_analyzer: [ # tokenizer: "ngram_tokenizer", # filter: [ # "lowercase", # "kuromoji_stemmer", # "cjk_width" # ], # char_filter: [ # "html_strip", # "kuromoji_iteration_mark" # ] # ] # ] # ] # ] # defstruct [:id, :title] # index_name "es_antenna" # document_type "elixir_exantenna_antenna" # settings [ # number_of_replicas: "1", # number_of_shards: "5", # analysis: [ # analyzer: [ # default: [ # filter: [ "kuromoji_neologd_baseform", "ja_posfilter", "cjk_width" ], # tokenizer: "ja_tokenizer", # type: "custom" # ], # ja_analyzer: [ # filter: [ "kuromoji_neologd_baseform", "ja_posfilter", "cjk_width" ], # tokenizer: "ja_tokenizer", # type: "custom" # ], # ngram_analyzer: [ # tokenizer: "ngram_tokenizer" # ] # ], # filter: [ # edge_ngram: [ max_gram: "15", min_gram: "1", type: "edgeNGram" ], # ja_posfilter: [ stoptags: [ "助詞-格助詞-一般", "助詞-終助詞" ], type: "kuromoji_neologd_part_of_speech" ] # ], # tokenizer: [ # ja_tokenizer: [ type: "kuromoji_neologd_tokenizer" ], # ngram_tokenizer: [ max_gram: "3", min_gram: "2", token_chars: [ "letter", "digit" ], type: "nGram" ] # ] # ] # ] # mapping [ # properties: [ # published_at: [ # format: "strict_date_optional_time||epoch_millis", # type: "date" # ], # tags: [ # "type": "string" # ], # title: [ # "type": "string" # ] # ] # ] def as_indexed_json(%{} = schema, opts) do Map.drop schema, [:id] end def extract_function(modules, arity) do Enum.reduce modules, [], fn module, acc -> functions = Enum.map(module.__info__(:functions), fn {function, ^arity} -> function _ -> nil end) acc ++ Enum.filter_map(functions, & !!&1, & {module, &1}) end end def get(args), do: args end