Wyszukiwanie po całych frazach nie zawsze działa dokładnie

1

Problem

Po podaniu całej frazy (operator "") nasza wewnętrzna wyszukiwarka czasem wyszukuje także jedynie fragment tej frazy. Nie wiem, co dokładnie w danej frazie powoduje, że nie są podawane dla niej dokładne wyniki. Przykłady, jakie sprawdziłem:

  • dla zapytania zawierającego jedynie frazę "nie kompiluje" podaje także wyniki zawierające słowo "kompiluje" nie poprzedzone słowem "nie"; tak to wygląda:

    screenshot-20210208235241.png

  • dla zapytania zawierającego jedynie frazę "kompiluje się" podaje także wyniki zawierające słowo "kompiluje", po których nie następuje słowo "się"; tak to wygląda:

    screenshot-20210208235305.png

  • natomiast dla zapytania zawierającego jedynie frazę "szybko kompiluje" podaje wyniki jedynie dla całej frazy; tak to wygląda:

    screenshot-20210208235331.png

Zachowanie aktualne

Wyniki wyszukiwania po całej frazie zawierają także wyniki wyszukiwania jedynie po fragmencie podanej frazy.

Zachowanie oczekiwane

Wyniki wyszukiwania po całej frazie zawierają tylko wyniki wyszukiwania po całej podanej frazie.


PS Przy czym, jak można zauważyć, w pierwszych dwóch przykładach (tych z zachowaniem nieoczekiwanym) pogrubiona jest jedynie część frazy. Natomiast w ostatnim przykładzie (tym z zachowaniem oczekiwanym) pogrubiona jest cała fraza.

1

Tak generalnie działa wyszukiwanie tekstowe często ;) W tym przypadku podejrzewam że "It's not a bug - It's a feature" cytując klasyka ;)

1

@Aleksander32: OK, nie miałbym nic przeciwko, gdyby to było wyraźne napisane. :) Obecnie dla mnie jest to nieintuicyjne. Gdy widzę w pomocy wyszukiwania (? wpisany w polu wyszukiwania) informację o szukaniu całych fraz, to oczekuję jedynie całych fraz.

Ale może tylko ja tak uważam? Mogę się zgodzić, że nie jest to opisane całkiem dokładnie. I że to, o czym Ty piszesz – że taka heurystyka jest domyślna w tego typu zastosowaniach – mogłoby być dla wielu osób właśnie domyślne.

0

Ale może tylko ja tak uważam?

nie, "" powinien szukać dokładnie, bo wszędzie to tak działa

1

To jest związane z tzw. stopwords w elasticsearch. Z indeksu usuwane są niektóre słowa dla zwiększenia wydajności oraz zmniejszenia potrzebnych zasobów. Tutaj jest ta lista: https://github.com/adam-boduch/coyote/blob/master/config/elasticsearch.php

Aktualnie mamy jakiś zapas RAM więc @Silv - śmiało możesz zrobić pull request na github z poprawionymi słowami i wdrożymy poprawkę.

1

Ale z jakimi słowami poprawionymi? Skoro jest tak, jak piszesz, to wydaje mi się, że problem leży raczej w tym, by słowa z tej listy nie były brane pod uwagę przy wykorzystaniu operatora "".

1

Z konfiguracji (link w poprzednim mailu) trzeba usunąć po prostu "się" czy "nie". Można zostawić "i" "o" itp. aby nie przeciążać indeksu. I wówczas będzie działać dobrze.

0

@Adam Boduch: chyba się nie zrozumieliśmy. ;) Mnie chodzi o to, że jak wpiszę frazę "i o to chodzi", to intuicyjne dla mnie by było, jeśli system wyszukałby dokładnie tę frazę – bez usuwania "i", "o" oraz "to".

Ale rozumiem, że wydajność może być problemem. Skoro tak, to cóż, niech zostanie jak jest – to chyba najlepszy kompromis.

0

@Adam Boduch:

Aktualnie mamy jakiś zapas RAM

o jakich wartościach jest mowa?

0

@Silv: tak, wiem o co chodzi :) Elasticsearch działa tak, że usuwa te mniej ważne słowa aby oszczędzić miejsce w indeksie. Jak jednak wspomniałem, mamy jeszcze wolne zasoby więc można by spróbować usunąć część słów ze stopwords.

0

@Adam Boduch: jeśli w ogóle brać pod uwagę wydajność w stosunku do operatora "", to niech już tak zostanie, jak jest.

Ale żebyśmy się dobrze zrozumieli, bo to dla mnie ważne: albo żadne ze stopwords nie są dla mnie brane pod uwagę, albo wszystkie są. :) Nie widzę sensu w usuwaniu części w tym przypadku. Nie widzę ponadto związku między usunięciem niektórych stopwords a działaniem operatora "".

Widzę natomiast związek między usuwaniem ograniczaniem zbioru stopwords a wydajnością, a także między działaniem operatora "" a wydajnością (czyli wydajność jakby spaja te dwie sprawy). Tak więc najlepszy kompromis dla mnie to tak, jak jest obecnie. (To znaczy oczywiście – być może już kiedyś usuwałeś część słów ze zbioru stopwords w związku z wydajnością; jednak nie biorę tego teraz pod uwagę).

1 użytkowników online, w tym zalogowanych: 0, gości: 1