2015-09-15 8 views
6

możemy wyszukać wszystkie słowa w konkretnej document.field tak:elasticsearch dopasować wszystkie słowa z dokumentu w zapytaniu

{ "query" : { "match" : { "title": { "query" : "Black Nike Mens", "operator" : "and" } } } } 

To będzie szukał słów Black, Nike i Mens w dziedzinie title tak, że zwracane są tylko te dokumenty, które będą miały WSZYSTKIE te słowa w polu title.

Ale to, co próbuję zrobić, jest trochę inne.

Chcę wyszukać tak, że jeśli wszystkie słowa z pola title dokumentu są obecne w moim zapytaniu, to zwrócą ten dokument.

Dla np.

przypuszczać, że jest to dokument z title : "Nike Free Sparq Mens White" w bazie elasticsearch

teraz jeśli szukać I z query : "Nike Free Sparq 09 - Mens - White/Black/Varsity Red" to powinien zwrócić ten dokument, ponieważ wszystkie słowa document.title nie istnieją w moim zapytaniu

ale jeśli szukać i z query : "Nike Free Lebron - Mens - White/Black" to powinno nie zwróci dokumentu, ponieważ moja kwerenda ma słowo Sparq brakujący

jest to rodzaj wyszukiwania odwrotnego i-operator

Czy to możliwe? Jeśli tak, to w jaki sposób?

+1

Zobacz ten link. Znajdziesz tam odpowiedź :) http: // stackoverflow.com/questions/26001002/elastic-search-difference-between-term-match-phrase-and-query-string – betto86

+0

dzięki za pomoc @ betto86, nie odpowiedział na moje pytanie, ale pomógł mi w bardziej powiązanych sprawach. –

+2

Mimo, że opublikowałeś obejście problemu, chcę również poznać czystsze rozwiązanie. – akai

Odpowiedz

3

W końcu udało mi się go uruchomić, ale nie metodą bezpośrednią!

To co mam zrobić:

  • Tworzenie czystą listę słów z kwerendy źródłowej przez:
    • zmiana małymi literami
    • zastępując żadnych specjalnych znaków i interpunkcji z miejsca
    • usunąć powielone wyrazy
  • Wyszukaj, używając normalnego dopasowania z operatorem OR dla słów połączonych jako ciąg znaków
  • Teraz znajdziemy najlepsze trafienia w wynikach
  • Bierzemy te hity jeden po drugim i robimy wyszukiwanie słowo-słowo w php (lub jakimkolwiek innym języku programowania, którego używasz)
  • To wyszukiwanie słów sprawdzi wszystkie słowa dokumentu od trafień, które znaleźliśmy, i dopasuje je do słów w zapytaniu źródłowym; tak, że wszystkie słowa z dokumentu trafienia powinny być obecne w źródłowym ciągu zapytań

To działało dla mnie wystarczająco dobrze!

Chyba, że ​​ktoś ma bezpośrednią metodę z języka zapytań elastycznych.