я создал инвертированный индекс из документов в течение 2-х таблиц:поиска вручную инвертированный индекс
- index_token (token_id, лексем)
- index_documents (doc_id, token_id, storage_document_id)
Теперь я хотите выбрать документы, в которых слова «кошка» и «собака» встречаются в одном документе storage_document.
Моя попытка была:
SELECT * FROM index_token INNER JOIN index_documents ON index_token.token_id = index_documents.token_id WHERE index_token.token = 'кошка' И/ИЛИ index_token.token = 'собака'
ИЛИ делает второй токен необязательным, поэтому я получаю документы, в которых есть собака или кошка, но не собака и кошка. И не дает мне никаких результатов.
Итак, как мне изменить запрос, чтобы получить ожидаемые результаты?
Он также должен принять более двух ключевых слов.
да это идет в правильном направлении, но ссылку на документ, который должен быть общим является storage_document_id, doc_id только первичный ключ index_documents – pila
, но мне интересно, если есть более расширяемой решение? поэтому мне нужно добавить целый новый блок INNER JOIN для каждого дополнительного ключевого слова ... не очень приятно, но я думаю, что он работает – pila