Wyszukiwarka traktuje słowa oddzielone `_` jako osobne

3

Szukajka na forum traktuje np funkcję str_replace jak wyszukanie str replace - wyszukuje i funkcje substr (bo str się łapie) oraz preg_replace (bo replace się łapie).

Podobnie jak ktoś wyszuka preg_replace to znajdzie i preg_match i str_replace.

Moim zdaniem na forum programistycznym wyszukiwanie funkcji też powinno być dozwolone, tak że jak ktoś szuka str_replace to znajdzie tylko str_replace.

1

Kurcze, masz racje :|

curl -X POST "localhost:9200/coyote/_analyze?pretty" -H 'Content-Type: application/json' -d'                                                                                                                                           
> {                                                                                                                                                                                                                                                                            
>   "analyzer": "default_analyzer",
>   "text": "str_replace() substr."
> }
> '
{
  "tokens" : [
    {
      "token" : "str",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "replace",
      "start_offset" : 4,
      "end_offset" : 11,
      "type" : "word",
      "position" : 1
    },
    {
      "token" : "substr",
      "start_offset" : 14,
      "end_offset" : 20,
      "type" : "word",
      "position" : 2
    }
  ]
}

To jest faktycznie do poprawienia. Trzeba zmienić chyba typ tokenizera na standard zamiast whitespace (chociaż mogę się mylić). Podawajcie inne przykłady błędnego działania, to od razu się unit testy napisze.

0
TomRiddle napisał(a):

Moim zdaniem na forum programistycznym wyszukiwanie funkcji też powinno być dozwolone, tak że jak ktoś szuka str_replace to znajdzie tylko str_replace.

Moim zdaniem nie powinno tak być.
Wyszukanie "str_replace" powinno znaleźć na pierwszym miejscu (najlepiej punktowane) wyniki z "str_replace", ale na dalszych pozycjach wyszukiwarka powinna znajdować strony powiązane. Czyli "replace", "str_repeat" i "str".

0
vpiotr napisał(a):
TomRiddle napisał(a):

Moim zdaniem na forum programistycznym wyszukiwanie funkcji też powinno być dozwolone, tak że jak ktoś szuka str_replace to znajdzie tylko str_replace.

Moim zdaniem nie powinno tak być.
Wyszukanie "str_replace" powinno znaleźć na pierwszym miejscu (najlepiej punktowane) wyniki z "str_replace", ale na dalszych pozycjach wyszukiwarka powinna znajdować strony powiązane. Czyli "replace", "str_repeat" i "str".

Tylko że w innych językach funkcje np wyglądają isset, strpos, substr - i one już nie będą rozdzielone na "is", "set" ani "str", "pos".

To byłoby bardzo niekonsekwentne

6
Adam Boduch napisał(a):

Podawajcie inne przykłady błędnego działania

Mi zawsze brakowało wyszukiwania "pełnych wielowyrazowych fraz".

0

Co do PHP jeszcze, napisanie zmiennej, np $match również jest szukane jako match. Ale nie mam zdania czy to do poprawy czy nie.

1

I taki sam problem występuje jak coś chciałby w dziale C/C++ wyszukać std::replace, to znajdzie mu std oraz replace.

1

test <=>

PS: operatora <=> również szukajka nie znajduje

1

test ?:

PS: Ani ?:

1

Ten elasticsearch i tak działa średnio, więc szybciej wyszukasz po googlach, szkoda życia na to ;)

0

Elastic domyślnie usuwa symbole podczas indeksowania, ale można to zmienić. Np. w konfiguracji ustawione jest aby nie usuwał znaku # aby można było znaleźć poprawnie frazę C#.

1

@Marooned: my używamy multi match query, które działa tak, że po prostu usuwa niepotrzebne symbole z zapytania i szuka w tekście słów kluczowych. To o czym Ty mówisz to zapytania query string które umożliwiają stosowanie różnych operatorów podczas wyszukiwania. Zmieniłem to, póki co w głównej wyszukiwarce (zmiana jest na git).

Ma to jednak jedną wadę: niepoprawnie sformułowane zapytanie rzuca wyjątkiem. Co prawda w nowej wersji jest coś takiego jak simple query string ale to wymagałoby upgrade elasticsearch na serwerze.

0
Adam Boduch napisał(a):

Ma to jednak jedną wadę: niepoprawnie sformułowane zapytanie rzuca wyjątkiem.

Czy na forum programistów możnaby się spodziewać żeby wyszukiwanie było bardziej zaawansowane?

Ewentualnie może domyślnie mogłoby być wyszukiwanie takie jakie jest teraz, a w profilu opcja zmiany konfiguracji na ten bardziej restrykcyjny sposób?

0
TomRiddle napisał(a):

Czy na forum programistów możnaby się spodziewać żeby wyszukiwanie było bardziej zaawansowane?

Szewc bez butów chodzi. Nie każdemu się chce. ;p

1

@Marooned: poprawka o której mówię została wdrożona na głównej wyszukiwarce. Możesz sprawdzić np. taki URL: https://4programmers.net/Search?q=%22za%C5%82amany+marooned%22

0
Adam Boduch napisał(a):

@Marooned: poprawka o której mówię została wdrożona na głównej wyszukiwarce. Możesz sprawdzić np. taki URL: https://4programmers.net/Search?q=%22za%C5%82amany+marooned%22

A gdzie jest ta poprawka na githubie odnośnie str_replace? Nie widzę PRa

1

Wyłączyłem usuwanie znaku _ w elastic. Problem z : jest taki, że jeżeli nie będziemy usuwać tego znaku, to po wpisaniu frazy test, szukarka nie znajdzie frazy test: (zakończona kropką).

0
Adam Boduch napisał(a):

Wyłączyłem usuwanie znaku _ w elastic. Problem z : jest taki, że jeżeli nie będziemy usuwać tego znaku, to po wpisaniu frazy test, szukarka nie znajdzie frazy test: (zakończona kropką).

A czemu ta wyszukiwarka musi być taka restrained?

Czy to byłoby dziwne gdyby wpisanie "preg_match" znalazło "preg_match" oraz "preg_match_all" ale "preg_replace" już nie? Moim zdaniem to rozsądne.

0

Moim zdaniem jeśli hasło zawiera jakiekolwiek znaki poza [A-Za-z0-9] to wyszukiwarka powinna najpierw szukać pełnotekstowo dokładnie tego co podałem, w drugiej kolejności zwracać wyniki z wyciętymi znakami specjalnymi.

Może to pomoże: https://stackoverflow.com/questions/33580698/elasticsearch-query-string-combined-with-match-phrase

0
Adam Boduch napisał(a):

@Marooned: poprawka o której mówię została wdrożona na głównej wyszukiwarce. Możesz sprawdzić np. taki URL: https://4programmers.net/Search?q=%22za%C5%82amany+marooned%22

Jest szansa by szukarka na forum działała tak samo? By "java script" nie dawała wyników z samą javą?

2

@Marooned: tak, zostało to zrobione (tj. szukanie fraz).
@TomRiddle: spróbuj wpisać preg_match* (gwiazdka na końcu. uwaga, dopasuje też inne ciągi znaków po preg_match) lub preg_match | preg_match_all.

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