elasticsearch groß-und Kleinschreibung Begriff Filtersuche not_analyzed Feld

Gibt es ähnliche Fragen hier gestellt Elasticsearch Karte groß-und Kleinschreibung zu not_analyzed Dokumente, aber bei mir ist es ein bisschen anders, da ich viel mit Sonderzeichen.

Meisten Menschen empfehlen die Verwendung eines keyword analyzer kombiniert mit lowercase filter. Aber das funktioniert nicht in meinem Fall, weil keyword-analyzer tokenizes auf Leerzeichen und Sonderzeichen wie ^, #, etc. die Pause, die Art der Unterstützung werde ich für.

d.h.

  1. ^HELLOWORLD abgestimmt werden sollte, indem die Suche ^helloworld, aber nicht helloworld
  2. #FooBar abgestimmt werden sollte, indem #foobar aber nicht foobar.
  3. Foo Bar abgestimmt werden sollte, indem foo bar, aber nicht foo oder bar.

Ähnliche Funktionalität mit dem, was wir hier sehen https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html#_term_filter_with_numbers, aber mit Fall-Gefühllosigkeit.

Weiß jemand, wie dies zu erreichen?

EDIT 1:

Es scheint, der Kern meines Problems wurde mit multi-Feld -, Stichwort - +Kleinschreibung scheint zu lösen die Frage aus dem Titel. Es wäre allerdings genauer zu Fragen, für eine multi-Feld-Wert-Eigenschaft.

test_mapping.json:

{
  "properties" : {
    "productID1" : {
      "type" : "string",
      "index_analyzer" :  "keyword_lowercase",
      "search_analyzer" : "keyword_lowercase"
    },
    "productID2" : {
      "type": "multi_field",
      "keyword_edge_ID": {
        "type": "string", 
        "index_analyzer":"keyword_lowercase_edge", 
        "search_analyzer":"keyword_lowercase_edge"
      },
      "productID2": {
        "type": "string", 
        "index": "analyzed", 
        "store": "yes", 
        "index_analyzer":"keyword_lowercase", 
        "search_analyzer":"keyword_lowercase"
      }
    }
  }
}

test.json:

{
  "index": {
    "analysis": {
      "filter":{
        "edgengramfilter": {
          "type": "edgeNgram",
          "side": "front",
          "min_gram": 1,
          "max_gram": 32
        }
      },
      "analyzer": {
        "keyword_lowercase" : {
          "type" : "custom",
          "tokenizer": "keyword",
          "filter": "lowercase"
        },
        "keyword_lowercase_edge": {
            "tokenizer": "keyword",
            "filter": ["lowercase", "edgengramfilter"]
        }
      }
    }
  }
}

Shell-Skript zu erstellen index mit Zuordnungen:

#!/bin/sh

ES_URL="http://localhost:9200"

curl -XDELETE $ES_URL/test
curl -XPOST $ES_URL/test/--data-binary @test.json
curl -XPOST $ES_URL/test/query/_mapping --data-binary @test_mapping.json

POST localhost:9200/test/query:

{ 
  "productID1" : "^A",
  "productID2" : "^A" 
}

Möchte ich es so, dass ich ein match gegen productID2 mit "^A", aber es ist wieder keine Ergebnisse, gerade jetzt, aber es funktioniert, wenn ich die gleiche Abfrage productID1. {"query": { "match": { "productID2": "^A" }}}

Nicht, dass das hilft, aber meine begrenzte Erfahrung ist, dass ES Filter die groß - / Kleinschreibung auf nicht-Analysierte Felder

InformationsquelleAutor Shark | 2015-09-03

Schreibe einen Kommentar