Поиск сфинкса в коллекции атрибутов - PullRequest
2 голосов
/ 16 января 2011

Есть ли способ поиска в Sphinx в коллекции атрибутов?

У меня есть свойство (как в здании, а не атрибут), которое среди других атрибутов имеет набор объектов, например, бассейн, вайфай.

Каждый объект имеет несколько объектов

Ответы [ 3 ]

5 голосов
/ 16 января 2011

Понял, вы должны использовать атрибут "multi", см. Прикрепленный пример поиска xmlpipe2 doc + php

<?xml version="1.0" encoding="UTF-8"?>
<sphinx:docset>
 <sphinx:schema>
  <sphinx:field name="capacity"/>
  <sphinx:field name="region"/>
  <sphinx:field name="facilities"/>
  <sphinx:attr name="capacity" type="int"/>
  <sphinx:attr name="region" type="int"/>
  <sphinx:attr name="facilities" type="multi"/>
 </sphinx:schema>
 <sphinx:document id="94">
  <capacity>37</capacity>
  <region>12</region>
   <facilities>
   <attr>23</attr>
   <attr>5</attr>
   <attr>2</attr>
   <attr>1</attr>
  </facilities>
 </sphinx:document>
</sphinx:docset>

Поиск PHP:

$sp = new SphinxClient();
$sp->SetMatchMode(SPH_MATCH_ALL);
$sp->SetArrayResult(true);
$sp->SetServer('localhost', 3312);
$sp->SetFilter('facilities', array(23, 5));
$sp->Query();
1 голос
/ 17 января 2013

В моем случае объявление атрибутов MVA как:

<facilities>
   <attr>23</attr>
   <attr>5</attr>
   <attr>2</attr>
   <attr>1</attr>
</facilities>

не сработало.Но когда я делаю это следующим образом:

<facilities>23,5,2,1</facilities>

... это работает!

1 голос
/ 07 августа 2011

Для этого случая лучше использовать атрибуты с несколькими значениями .

sql_attr_multi = uint facilities from query; \
SELECT id, facility_id FROM facilities

В заявке:

$cl->SetFilter('facilities', array(1, 2, 3));
$cl->Query();

Но вы можете избежать использования атрибутов MVA. Просто объедините каждое средство в запросе SQL:

sql_query = select group_concat(facilities SEPARATOR ' ') as facilties \
from building b inner join facilities f on (b.facility_id = f.id)

В приложении:

$cl->Query("@facilities pool");
...