|
Krzysztof Kaczyński
Postów: 8 od 27/05/2009
|
Poniedziałek 14 Wrzesień 2009 12:34:38 pm
Attribute filtering a Text Line
Witam,
W zdefiniowanej przeze mnie klasie produktu istnieje pole typu Text Line, ktore zawiera wymienione bo przecinku cechy.
W jednym z plikow .tpl przeszukuje obiekty tej klasy ktore zawieraja szukana ceche:
{let res = fetch('content', 'list', hash('parent_node_id', $node.node_id, 'class_filter_type', 'include', 'class_filter_array', array( 'produkt' ), 'attribute_filter', array( array('produkt/cecha','like',concat('*',$search,'*'))), 'sort_by', array('priority',true()) ))}
Niestety przeoczylem przy projektowaniu fakt iz pole text line jest ograniczone do 255 znakow. Przy niektorych produktach okazalo sie ze dlugosc atrybuttu cech wyraznie ten rozmiar przekracza. Dziwne jest dla mnie to iz moge dodac obiekt o atrybucie cecha wiekszym niz 255 znakow. Jest on poprawnie wyswietlany. Natomiast filtrowanie dziala tylko do granicy 255 znakow.
Czy mozna to jakos obejsc?
Z gory dziekuje za pomoc.
KK
|
|
Bartek Modzelewski
Postów: 133 od 05/07/2006
|
Czwartek 17 Wrzesień 2009 1:25:30 pm
Re: Attribute filtering a Text Line
Witaj,
Nie do końca rozumiem w jaki sposób masz ograniczony atrybut "cecha" do 255 znaków, chodzi ci o ustawienie atrybutu w klasie? Jeśli tak - to nic prostszego to zmienić. Podejrzewam jednak, że chodzi o coś innego:
O ile dobrze wiem, filtrowanie po atrybucie używa innego pola w tabeli bazy niż do przechowania całej treści. W przypadku data typu "Text line" jest to sort_key_string (tabela ezcontentobject_attribute).Faktycznie, w bazie to pole ma ograniczenie do 255 znaków, dlatego dłuższa treść jest obcinana i nie udaje się wyszukać odpowiedniego obiektu. Nie wiem czy są jakieś dodatkowe ograniczenia w kodzie, ale możesz spróbować zmodyfikować ten atrybut w bazie danych z VARCHAR(255) na VARCHAR(1000).
Następnie trzeba by odświeżyć zawartość tego atrybutu. Podejrzewam niestety, że odpalenie reindeksacji całej strony tu nie pomoże. Musisz niestety napisać jakiś prosty skrypt, który w pętli przejdzie wszystkie pola tego typu i przekopiuje zawartość z data_text do sort_key_string.
No cóż, sam tego nie testowałem, ale może zadziała. Jednocześnie radzę nie przesadzać z wielkością atrybutu - podane 1000 znaków jest przykładowe. Zbyt duża wartość może niekorzystnie odbić się na wydajności.
Pozdrawiam
|
|
Krzysztof Kaczyński
Postów: 8 od 27/05/2009
|
Czwartek 17 Wrzesień 2009 2:12:02 pm
Re: Attribute filtering a Text Line
Dzieki za informacje,
VARCHAR nie ma ograniczenia do 255 znakow?
Jesli nie - to rzeczywiscie ma to rece i nogi.
Warto kiedys sprawdzic czy dziala i jaki wplyw na wydajnosc ma wielkosc tego pola.
Udalo mi sie jednak obejsc problem przy pomocy Extended attribute filtering i wspomnianego pola data_text.
|
|
Bartek Modzelewski
Postów: 133 od 05/07/2006
|
Piątek 18 Wrzesień 2009 1:53:08 pm
Re: Attribute filtering a Text Line
Świetnie! Extended attribute filtering jest bardzo dobrym rozwiązaniem, bo można filtr umieścić w rozszerzeniu i niczego w bazie nie modyfikować :)
|