Как передать значения оператора select внутри полного поиска по индексу в mySql? - PullRequest
0 голосов
/ 10 января 2012

Я хотел бы передать select body from articles набор результатов вместо database в качестве ключевого слова в списке параметров AGAINST. Как мне это сделать?. Я хочу найти соответствующие статьи на основе соответствующих ключевых слов из таблицы.

SELECT * FROM articles
     WHERE MATCH (title,body)
     AGAINST ('database' IN NATURAL LANGUAGE MODE);

Я хочу сделать это:

SELECT * FROM articles
     WHERE MATCH (title,body)
     AGAINST ("select title,body from articles" IN NATURAL LANGUAGE MODE);

Редактировать с комментарий :
Я хотел бы получить связанную статью, основанную на плотности соответствующих ключевых слов в канале статьи. Я создал индекс FULLTEXT, и моя таблица в формате ISAM. В настоящее время канал статьи содержит настраиваемые поля субтитров и тела. Поскольку все должно быть динамичным, поэтому я не могу передать ключевые слова внутри AGAINST('Lorem Manager'), потому что мы не знаем, какими будут ключевые слова при посещении следующей новостной статьи, поэтому я встраиваю оператор select, чтобы получить заголовок и текст. Я получаю результат, но почему-то мои ключевые слова не распознаются.

1 Ответ

1 голос
/ 11 января 2012

Чего именно вы надеетесь достичь?

Чтобы лучше понять - и, возможно, проиллюстрировать - что вы просите, давайте обсудим вещи на языке ExpressionEngine , в конце концов, это то, что вы пометили свой вопрос.

Используя тему сайта Agile Records ExpressionEngine, давайте использовать два поля из канала About - Тело и название сотрудника:

Тело
Настраиваемое поле: {about_body}
Столбец MySQL: field_id_4

Должность сотрудника
НастраиваемыйПоле: {about_staff_title}
MySQL столбец: field_id_6

Во-первых, если вы этого еще не сделали, вам нужно создать один индекс FULLTEXT , содержащий всестолбцы, по которым вы ведете поиск.

Используя два приведенных выше столбца, выполните следующую инструкцию SQL из phpMyAdmin или вашего любимого клиента графического интерфейса MySQL:

CREATE FULLTEXT INDEX related_articles
    ON exp_channel_data (field_id_4, field_id_6);

Вы можете проверить только что созданныйINDEX с помощью следующего запроса:

SHOW INDEX FROM exp_channel_data;

Чтобы выполнить поиск на естественном языке строки (ключевых слов) по текстовому набору (один или несколько столбцов базы данных), рассмотрите следующее ... где Lorem и Manager являются вашимиключевые слова:

SELECT * FROM exp_channel_data
    WHERE MATCH (field_id_4, field_id_6)
    AGAINST ('Lorem Manager' IN NATURAL LANGUAGE MODE);

, которые будут возвращать результирующий набор, подобный следующему (упрощено для удобства чтения):

+----------+-------------+------------------------+
| entry_id | field_id_4  | field_id_6             |
+----------+-------------+------------------------+
|        3 | Lorem ipsum |                        |
|        8 |             | Product Manager        |
|        4 |             | Co-Owner/Label Manager |
+----------+-------------+------------------------+

При использовании полнотекстового поиска на естественном языке необходимо, чтобыстолбцы, названные в функции MATCH (), - это те же столбцы, которые включены в некоторый индекс FULLTEXT в вашей таблице.

Например, в предыдущем примере обратите внимание, что столбцы, названные в функции MATCH () ()field_id_4 и field_id_6 ) совпадают с именами, указанными в определении индекса FULLTEXT таблицы статьи.

Если вы хотите искать в столбцах отдельно ,вам нужно создать отдельные индексы FULLTEXT для каждого столбца.


Некоторые слова игнорируются при полнотекстовом поиске:

  • Любое слово, которое являетсяслишком короткое игнорируется.Минимальная длина слов по умолчанию, которые можно найти при полнотекстовом поиске, составляет четыре символа.
  • Слова в списке стоп-слов игнорируются.Стоп-слово - это такое слово, как «или», которое встречается настолько часто, что считается, что оно имеет нулевую семантическую ценность.Существует встроенный список стоп-слов, но он может быть перезаписан пользовательским списком.

Список стоп-слов по умолчанию можно просмотреть в 11.9.4.Полнотекстовые стоп-слова документации MySQL.

...