Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Sphinx] Sortowanie uwzględniając kolejność wystąpień słowa
Walian
post
Post #1





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


Jak ustawiać sortowanie, by Sphinx uwzględnił także kolejność występowania szukanego słowa w rekordach?
Czyli jak wyszukam "lampa" - żeby najpierw pokazywał rekordy, w których to słowo znajduje się jak najbliżej początku, potem rekordy, w których znajduje się jako drugie w kolejności itd.

W tej chwili mam po prostu:
  1. $sphinx->SetSortMode(SPH_SORT_RELEVANCE);


Wersja:
Sphinx 1.10-beta (r2420; Jul 19, 2010)
działa pod kontrolą CentOS.

Ten post edytował Walian 19.10.2010, 08:33:11
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Ale w takim razie nie jest Ci potrzebny parametr trafności wyszukiwania skoro z góry skazujesz sortowanie na "bliskość" wystąpieniA słowa.
1) nie wiem czy jest to możliwe - podejrzewam, że w bardzo ograniczonym stopniu. Poza tym na liście funkcji http://sphinxsearch.com/docs/current.html#...yntax#sort-expr nie znalazłem funkcji do wyszukiwania pozycji w tekście
2) jeżeli jest to w jakiś sposób możliwe to jak chcesz uwzględnić stemming?
w skrócie, nie kombinujmy (IMG:style_emoticons/default/smile.gif) Parametr trafność został wymyślony przez naprawdę niezłych ludzi więc po co to "poprawiać"?

Ten post edytował wookieb 19.10.2010, 10:16:36
Go to the top of the page
+Quote Post
Walian
post
Post #3





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


To w zasadzie nie był mój pomysł, tylko szefa, który chciał by wyszukiwarka zwracała jak najlepsze wyniki. No ale wygląda na to, że masz rację.
Tak dokładne wyszukiwanie nie jest dla nas koniecznością, ważniejsza się tu okazuje kosmiczna wydajność "Świnksa", dzięki której będę mógł przyspieszyć nie tylko wyszukiwanie produktów, ale także ich przeglądanie, filtrowanie i zliczanie znalezionych produktów - wyświetlane obok nazw kategorii ;-)

Ten post edytował Walian 19.10.2010, 11:45:24
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Do tego celu o którym mówisz znacznie lepiej wypada (pod względem wydajności) Solr (dzięki FACET-om). Ale to oczywiście kwestia gustu.

Ten post edytował wookieb 19.10.2010, 11:51:48
Go to the top of the page
+Quote Post
Walian
post
Post #5





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


Nie sprawdzałem tego jeszcze (Solr to moduł do Apache tak?), ale już wystarczająco czasu spędziłem nad ogarnięciem Sphinx-a. Jakbym teraz powiedział, że chcę wypróbować coś innego to... sam rozumisz (IMG:style_emoticons/default/biggrin.gif)
Ale na pewno kiedyś sprawdzę. Wypada znać wszystko. Na pewno sprawdzę też Lucene. Póki co wdrożę Sphinx-a. I tak na razie spełnia wszystkie nasze wymagania. Dzięki za odpowiedzi.
Go to the top of the page
+Quote Post
wookieb
post
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Solr jest oddzielnym oprogramowaniem tylko, że pod opieka fundacji Apache. Solr aktualnie ściśle współpracuje z LUCENE i tak naprawdę jest od niej zależny. Trwają prace nad stałym połączeniem obu narzędzi (o ile pamiętam ma wyjść pod nazwą Solr 4.0).
Jak używasz sphinxa to pamiętaj, że po przekroczeniu pewnej ilości produktów (a dokładniej więcej niż ustawienie max_matches w sphinx) będziesz zmuszony do zmiany konfiguracji. Ale napominam o tym "tak tylko" (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Walian
post
Post #7





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


Mam obecnie ustawione 10000 i taka ilość wydaje mi się być wystarczającą. Jak do tej pory najwięcej podstron (po 20 produktów na jednej) to było grubo ponad 6 tyś. więc jakiś zapas jest i raczej się drastycznie nie zmniejszy. Jest około 3x tyle co być powinno.

A wiesz coś na temat Lucene? Korzystałeś z tego? Może potrafiłbyś przyrównać Solr czy samego (samej?) Lucene do Sphinx-a by pokazać różnice? Pytam ot tak - z ciekawości. O Lucene wiem tylko tyle, że została napisana w Javie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
wookieb
post
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Sphinx nie ma replikacji, Solr tak.
Sphinx jest mniej wydajny od Solra.
Solr jest o wiele bardziej konfigurowalny jeżeli chodzi o wszystkie operacje wyszukiwania pełnotekstowego.
Ograniczenie ilości wyników max_matches jest dość wkurzające a podane zbyt dużej wartości spowoduje problemy z wydajnością.
Solr jest niesamowicie prosty w obsłudze.
Solr posiada FACETy czyli np twoje kategorie + ilość rekordów znalezionych.

Różnic jest znacznie więcej. Wystarczy, że poszukasz porównań w googlach (IMG:style_emoticons/default/smile.gif)
Generalnie byłem zwolennikiem Sphinxa dopóki nie poznałem SOLR-a
Go to the top of the page
+Quote Post
Walian
post
Post #9





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


No to widzę, że powinienem się Solrem poważnie zainteresować.
Dzięki za informacje ;-)

Edit:
Mam jeszcze jeden problem.
Używam SPH_MATCH_ANY.
Mam m.in taki produkt:
Kod
Apple MacBook Pro 15"" 2.66GHz/4GB/320GB/GeForce 9600M GT/SD

Gdy go wyszukuję poprzez wpisanie:
Kod
geforce 9600*

to mi go znajduje, natomiast używając poniższych kombinacji już nie:
Kod
apple geforce

Kod
apple geforce*

Kod
apple* geforce*

Kod
apple * geforce *

Kod
apple geforce 9600m

Kod
apple geforce 9600m*

Kod
geforce apple*


Widocznie zbyt restrykcyjnie szuka. Da się to jakoś obejść nie tracąc znacząco na dokładności sortowania?

Edit:
Zauważyłem, że takie coś daje rade:
Kod
geforce* | apple*

Ale czy to dobry pomysł?

EDIT:
Widzę, że to nie jest dobre rozwiązanie. Żałuję, że nie sprawdziłem na samym początku czy będzie taki problem w Sphinx-ie.
Jeśli próbuję znaleźć np:
Kod
ASUS GeForce 9500GT 1024MB DDR2 / 128bit DVI / HDMI PCI-E (550 / 800)

wpisując:
Kod
asus geforce*

to Sphinx go znajduje.
Jak wpiszę słowa w odwrotnej kolejności to nie znajduje.
Wpisanie:
Kod
geforce | asus*

Daje zbyt dużo wyników tzn zwraca na początku:
Kod
ASUS P5E-VM HDMI Intel G35 Socket 775

a pierwszy GeForce-em jaki znajduje się na liście wyników (dużo niżej) to:
Kod
Asus ENGTS250 GeForce GTS 250 CUDA 1GB DDR3 (256bit),2xDualDVI, HDCP, BOX

Wpisanie:
Kod
geforce & asus*

Ani trochę nie zmienia wyników! Czyżby bug?

Jakieś pomysły?

Ten post edytował Walian 21.10.2010, 12:39:45
Go to the top of the page
+Quote Post
wookieb
post
Post #10





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




a po jakim parametrze sortujesz?
Go to the top of the page
+Quote Post
Walian
post
Post #11





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


Chyba już wiem co było nie tak - miałem w kodzie:
  1. $result = $sphinx->Query($sphinx->EscapeString($str), 'nazwa_indeksu');

Ale ja zakręcony jestem :/
Wyrzuciłem już to escape-owanie.

Teraz wpisanie:
Kod
geforce* & asus*

Zwraca:
Kod
ASUS M3N WS, GeForce 8200, DualDDR2-1066, SATA2, RAID, GBLAN, VGA, FW, ATX (M3N WS)

Więc chyba jest dobrze. Dzięki za odpowiedź - Twoje pytanie sprawiło, że znowu zacząłem grzebać w kodzie i znalazłem przyczynę (IMG:style_emoticons/default/smile.gif)

EDIT:
Prawie dobrze, jest jeszcze problem z wyszukiwaniami:
Kod
5850*

Nic nie zwraca, a jest taki produkt:
Kod
Gigabyte Radeon HD 5850 GPU, 1GB DDR5 (256bit), PCI-E, HDMI DualDVI D-sub, BOX

Po wpisaniu:
Kod
9600gt*

Znajduje tylko produkt:
Kod
TRILINE NOWY ! TRILINE ALIVIO 31A-7400H7 (E7400/ 3GB/ 9600GT 1GB/ 500GB/ DVDRW/WIN 7 PREMIUM)


a są jeszcze:
Kod
ZOTAC GF 9600GT CUDA,ECO Edition, 1GB DDR3 (256bit), HDTV DualDVI, PCI-E, BOX
Gigabyte GeForce 9600GT CUDA, 1GB GDDR3 (256bit),2x DVI-I HDMI HDCP, PCI-E, BOX
Gigabyte GeForce CUDA 9600GT, 1GB GDDR3 (256bit), HDMI DVI D-SUB, PCI-E, BOX


Czyżby ten problem dotyczył tylko liczb?

EDIT:
Ok sprawa załatwiona - problem stanowiło źle ustawione "ignore_chars" w konfiguracji indeksu (IMG:style_emoticons/default/smile.gif)

Ten post edytował Walian 22.10.2010, 08:42:46
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 01:04