2013-06-07 8 views
5

Mam zapytanie elasticsearch które staram się odpowiednio dopasować, same dane pole zawiera - (kreski), dane tekstowe są GUIDdopasowanie cały ciąg z kreskami w elasticsearch

Nie było dopasowane prawidłowo, ponieważ był podział termin na poszczególne słowa rozdzielone przez -

mam ponieważ zmienił zapytanie do korzystania zapytanie match_phrase takiego:

"query": { 
    "filtered": { 
      "query": { 
       "match_phrase":{ 

        "guid":{"operator" : "or","query":"bd2acb42-cf01-11e2-ba92-12313916f4be"} 
       } 
      } 
    } 
} 

Kiedy próbuję dopasować tylko jeden GUID, to działa dobrze .

Jednak staram się dopasować wiele GUID

Więc to obecnie wygląda

"query": { 
    "filtered": { 
      "query": { 
       "match_phrase":{ 

        "guid":{"operator" : "or","query":"bd2acb42-cf01-11e2-ba92-12313916f4be d1091f08-ceff-11e2-ba92-12313916f4be"} 
       } 
      } 
    } 
} 

zakładam jej nie działa, ponieważ jej próbując dopasować cały ciąg, a nie każdy osobno GUID.

Próbowałem dodać "analizator": "spację" do zapytania, ale to całkowicie przerwała zapytanie.

Jaka jest najlepsza metoda, aby upewnić się, że zapytanie szuka całego ciągu GUID i umożliwia dopasowanie wielu GUIDÓW?

Odpowiedz

4

Ustawiam mapowanie pola na not_analyzed dla podobnych celów.

"guid" : { 
     "type" : "string", 
     "index" : "not_analyzed" 
    } 

Ręczne tworzenie zapytania następnie działa.

{ 
    "bool" : { 
     "should" : [ 
      { 
       "term" : { "guid" : "bd2acb42-cf01-11e2-ba92-12313916f4be" } 
      }, 
      { 
       "term" : { "guid" : "d1091f08-ceff-11e2-ba92-12313916f4be" } 
      } 
     ], 
     "minimum_number_should_match" : 1 
    } 
} 
Powiązane problemy