Ich versuche, die Suche nach Endbenutzer mit Typ, wie sie gehen, die mehr wie SQL Server ist. konnte ich ES Abfrage für das angegebene SQL-Szenario implementieren:Wilcard Suche oder Teilabgleich in Elastic Suche
select * from table where name like '%pete%' and type != 'xyz and type!='abc'
Aber die ES-Abfrage funktioniert nicht für diese SQL-Abfrage
select * from table where name like '%peter tom%' and type != 'xyz and type!='abc'
In meinem Elasticsearch alongwith der Wildcard-Abfrage muss ich auch führen Sie einige boolean gefilterten Abfrage
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"query": {
"wildcard": {
"name":
{ "value": "*pete*" }
}
}
}
],
"must_not": [
{
"match":
{ "type": "xyz" }
}, {
"match":
{ "type": "abc" }
}
]
}
}
}
}
}
Die obige elastische Abfrage mit Wildcard-Suche funktioniert gut und wird mir alle Dokumente, die pete Spiele und sind nicht vom Typ xyz und abc .Aber wenn ich die Wildcard mit 2 seprate Worten versuchen ausführen seprated von Raum die gleiche Abfrage gibt mir dann, wie gezeigt leer below.For Beispiel
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"query": {
"wildcard": {
"name":
{ "value": "*peter tom*" }
}
}
}
],
"must_not": [
{
"match":
{ "type": "xyz" }
}, {
"match":
{ "type": "abc" }
}
]
}
}
}
}
}
Meine Mapping folgt als:
{
"properties": {
"name": {
"type": "string"
}
"type": {
"type": "string"
}
}
}
Welche Abfrage soll ich verwenden, um nach Worten Wildcard-Suche möglich zu machen seprated durch Leerzeichen
Sie Problem ist, dass Sie verstehen nicht, wie ES Indizierung von Daten. Schauen Sie dazu https://www.elastic.co/guide/en/elasticsearch/guide/current/inverted-index.html. Schauen Sie auch auf ngGram https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html –
Also Problem ist, dass, wenn Sie den Text "Hallo Welt" in ES indexieren wird es [werden "Hallo Welt"]. –
Ich verstehe, wie Dokumente in ES gespeichert werden, aber was bietet ES, um Benutzern zu ermöglichen, sql wie Suche nach Wörtern getrennt durch Leerzeichen auszuführen, ist meine Frage – andy