Ostatnio spotkalem sie z silnikiem wyszukiwania solr. Napisana w javie wiec potrzebuje jakiegos tomcata do dzialania. Ma wbudowany panel do obslugi/statystyk itp. Index buduje sie wysylajac odpowiedni plik XML, np:
<add><doc>
<field name="id">3007WFP</field>
<field name="name">Dell Widescreen UltraSharp 3007WFP</field>
<field name="manu">Dell, Inc.</field>
<field name="cat">electronics</field>
<field name="cat">monitor</field>
<field name="features">30" TFT active matrix LCD, 2560 x 1600, .25mm dot pitch, 700:1 contrast</field>
<field name="includes">USB cable</field>
<field name="weight">401.6</field>
<field name="price">2199</field>
<field name="popularity">6</field>
<field name="inStock">true</field>
</doc></add>
Zapytanie do wyszukiwarki robic mozna przez file_get_contents() i zwraca
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">13</int>
<lst name="params">
<str name="rows">10</str>
<str name="start">0</str>
<str name="indent">on</str>
<str name="q">monitor</str>
<str name="version">2.2</str>
</lst>
</lst>
<result name="response" numFound="2" start="0">
<doc>
<arr name="cat"><str>electronics</str><str>monitor</str></arr>
<arr name="features"><str>19" TFT active matrix LCD, 8ms response time, 1280 x 1024 native resolution</str></arr>
<str name="id">VA902B</str>
<bool name="inStock">true</bool>
<str name="manu">ViewSonic Corp.</str>
<str name="name">ViewSonic VA902B - flat panel display - TFT - 19"</str>
<int name="popularity">6</int>
<float name="price">279.95</float>
<str name="sku">VA902B</str>
<arr name="spell"><str>ViewSonic VA902B - flat panel display - TFT - 19"</str></arr>
<date name="timestamp">2008-12-14T21:22:32.019Z</date>
<float name="weight">190.4</float>
</doc>
<doc>
<arr name="cat"><str>electronics</str><str>monitor</str></arr>
<arr name="features"><str>30" TFT active matrix LCD, 2560 x 1600, .25mm dot pitch, 700:1 contrast</str></arr>
<str name="id">3007WFP</str>
<bool name="inStock">true</bool>
<str name="includes">USB cable</str>
<str name="manu">Dell, Inc.</str>
<str name="name">Dell Widescreen UltraSharp 3007WFP</str>
<int name="popularity">6</int>
<float name="price">2199.0</float>
<str name="sku">3007WFP</str>
<arr name="spell"><str>Dell Widescreen UltraSharp 3007WFP</str></arr>
<date name="timestamp">2008-12-14T21:22:32.035Z</date>
<float name="weight">401.6</float>
</doc>
</result>
</response>
Korzystanie z tego wydaje sie dosc proste, indeksowac mozna przy kazdej edycji/dodawaniu postu/artykulu. Pojedyncze elementy z indeksu mozna usuwac wiec nie ma problemu z aktualizacja. Sam Solr nawet potrafi zwrocic kod php ktory po eval() mozna wykorzystac ale nie wiem jak to wyglada.
//
Dodam tylko ze zindeksowalem w ten sposob wszystkie swoje ebooki, ich laczna ilosc 8.6GB prawie 14k plikow. Indeksowanie polegalo na przekonwertowaniu wszystkich typow (pdf,html,doc,rtf) plikow do txt i wrzucenie pokazanym wyzej xmlem, trwalo to 1.5h :) Po calej operacji indeks zajmuje 919MB (mozna dodatkowo wlaczyc kompresje). Ksiazki wyszukuje sie mega szybko co mozna sobie sprawdzic http://paprykarz.org/search.php