Elasticsearch suchquery abfrage mit kategorieren

lordfritte

Lieutenant
Registriert
Juli 2006
Beiträge
965
Hallo ich wollte mal nachfragen ob hier jemand Erfahrung mit Elasticsearch(5.6.0) hat.

Ich habe folgendes Szenario: Ich habe einen Produktdaten-Index bestehend aus 3 properties:
Titel: string
Description: string
KategoryKey: string (md5 hash des Kategorie-Pfades)

Ich nutze die API(golang + PHP, daher ich nicht auf die HTTP Query-String API beschränkt) und möchte verschiedene Suchabfragen starten.

Dabei sind immer ein oder MEHRERE Kategorie-Keys enthalten und eine Textsuche auf Titel, oder Description, oder Title+ Description enthalten.

Die eigentliche Frage ist: Wie ich das Json für eine Suchabfrage(inklusive ausschließenden Keywords) formuliere? Damit ich eben Treffer NUR aus den Angegeben Kategorieren erhalte.

Ein Beispiel: Ich möchte in den Kategorie "8108e4735fd6acd0edb6d63d62c37cde" und "b3b7c084c5e166061853949c7f1478f0"
Nach Produkten mit "GORE-TEX" in Title und/order Description, aber nicht mit "passform*" in Description suchen.

Ich habe jetzt folgenden Query versucht:
PHP:
array(
		'index' => 'products_example',
		'type' => 'products_example',
		'body' => array(
			'size' => 1000,
			'query' => array(
				'bool' => array(
					'filter' => array(
						'terms' => array(
							'_categoryKey' => array("8108e4735fd6acd0edb6d63d62c37cde", "b3b7c084c5e166061853949c7f1478f0")
						)
					),
					'must' => array(
						'match' => array(
							'Title' => 'GORE-TEX'
						)
					)
				),
			)
		)
	);

Das Ergebnis sah am Anfang auch gut aus, aber dann ist mir Augefallen, dass zum Ende hin auch Ergebnisse, wo nur "GORE" im Title steht, aber kein "-TEX"....
 
Mit einer Match-Query sagst du Elasticsearch, dass es den Text analysieren soll und da wird es "GORE-TEX" bspw. (je nach Mapping) in "gore" und "tex" tokenizen. Entweder machst du daraus ein Term-Query, wie du es auch mit der Kategorie machst, oder aber du musst den Analyzer nach deinen Wünschen anpassen.
 
erstmal Danke!
Aber ich habe noch eine andere Frage:

query_string mit typ phrase + query mit wildcard funktioniert nicht oder?
z.b.
PHP:
'query_string' => array(
	'query' => 'die atmungsaktivste',
	'type' => 'phrase',
	'fields' => array("Description")
)

ich erhalte nur Ergebnisse wo wirklich "die atmungsaktivste" zusammensteht.

aber bei:
PHP:
'query_string' => array(
	'query' => 'die atmungsaktiv*',
	'type' => 'phrase',
	'fields' => array("Description")
)

ich erhalte alle Ergebnisse mit "atmungsaktiv*" aber teilweise ohne "die" davor

EDIT: Ah habe was gefunden, "phrase_prefix" heißt das Zauberwort
 
Zuletzt bearbeitet:
query_string habe ich noch nie genutzt, da kann ich dir nicht viel zu sagen. Magst du nochmal genauer beschreiben, für was du eine Query brauchst? Wie sehen die Eingangsdaten aus und womit soll was gefunden werden?

So wie ich das verstehe willst du den Input des Users für die query_string query nutzen?
 
Zurück
Oben