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.
^HELLOWORLD
abgestimmt werden sollte, indem die Suche^helloworld
, aber nichthelloworld
#FooBar
abgestimmt werden sollte, indem#foobar
aber nichtfoobar
.Foo Bar
abgestimmt werden sollte, indemfoo bar
, aber nichtfoo
oderbar
.
Ä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" }}}
InformationsquelleAutor Shark | 2015-09-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Sie sehen können in dem folgenden Beispiel, das
keyword
tokenizer undlowercase
filter macht genau das - es kleingeschrieben die gesamte Wert-unter Beibehaltung aller Leerzeichen und Sonderzeichen. Das Beispiel, wie es zu benutzen finden Sie in diese Antwort.Vielleicht sind Sie nicht die Angabe des Feldes, in Ihrem suchen und stattdessen auf der Suche _all Felder, die Analyse mit Hilfe der standard-analyzer.
Ich habe aktualisiert die original-Beitrag mit einer detaillierteren Konfiguration von meinem system. Ich scheine zu sein, vermasselt das design der multi-Feld mit diesem analyzer
Ich entdeckte das problem. Ich habe nicht die "fields": { ... } um meine zwei Feldern. Hinzufügen es schien, um das problem zu lösen.
InformationsquelleAutor imotov