Поиск сфинкса: исключая результаты индекса B из результатов индекса A - PullRequest
0 голосов
/ 08 октября 2011

Вот моя проблема:

У меня есть 2 индекса:

A - только названия продуктов B - названия продуктов и описания продуктов

По умолчанию я выполняю поиск по индексу А, чтобы классифицировать товары (например, большинство велосипедов имеют название «велосипед»). Иногда бывают случаи, когда нужно определить категорию (которая может быть подкатегорией чего-либо), нам нужно посмотреть описание, в основном, чтобы исключить не относящиеся к делу результаты. Чтобы разбиение на страницы результатов поиска работало, мне нужно получить этот чистый результат в виде одного массива после запуска RunQueries ().

Но это не работает. Это в основном добавляет результаты обоих запросов, и похоже, что нет никакого способа вычесть результаты. У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 17 ноября 2011

Скажите, если я что-то упустил, но мне кажется, что вы пытаетесь включить результаты с названиями продуктов, которые соответствуют определенному запросу, и исключить результаты с описанием, соответствующим другому запросу?

Если этоВ этом случае мне кажется, что иметь 2 индекса бесполезно, и вы можете иметь один индекс с названиями и описаниями продуктов, а затем выполнить запрос полнотекстового поиска следующим образом:

@title queryA @description -queryB

Вы можете использоватьтот же запрос для поиска совпадений, которые имеют заголовок queryA И описание queryB, просто удалив символ -.

Если это не основа, единственный другой способ, которым я мог бы подумать, это использовать SphinxQL (яЯ не очень хорошо разбираюсь в любой из библиотек, так как поддержка всех библиотек, которые не используют SphinxQL, постепенно прекращается в будущем, насколько я читал)

Используя SphinxQL, вы могли бы выполнить 2 запросатот, который похож на

SELECT id FROM indexB WHERE MATCH('@description queryB')

, а затем выполните второй запрос, используя список идентификаторов, которые вы получили из первого запросакак таковой

SELECT id FROM indexA WHERE id NOT IN(id1,id2,id3,...)
...