Результаты поиска

Я вижу интересную аномалию (?) Я пытаюсь разобраться. Я создал представление с открытым фильтром. Поиск: Условия поиска. Я пытаюсь подражать набору результатов, предлагаемому стандартным модулем поиска drupal, но я нахожу интересные результаты на основе оценки.

Когда я ищу «term1» (без кавычек) как в обычном поиске по сайту, так и в представлении:

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

Итак, я думаю, мой вопрос действительно в том, «откуда берутся результаты поиска по поисковым модулям, и как я могу воссоздать его в представлении?»

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

Основной поиск sql, если смотреть с devel:

SELECT i.type AS type, i.sid AS sid, SUM((45.0578814438 * i.score * t.count)) AS calculated_score 
FROM search_index i 
INNER JOIN node n ON n.nid = i.sid 
INNER JOIN search_total t ON i.word = t.word 
INNER JOIN search_dataset d ON i.sid = d.sid AND i.type = d.type 
WHERE (n.status = :db_condition_placeholder_0) AND( (i.word = :db_condition_placeholder_1) )AND (i.type = :db_condition_placeholder_2) AND( (d.data LIKE :db_condition_placeholder_3 ESCAPE '\\') ) GROUP BY i.type, i.sid 
HAVING (COUNT(*) >= :matches) 
ORDER BY calculated_score DESC 
LIMIT 10 OFFSET 0

Из созданного представления:

SELECT node.title AS node_title, node.nid AS nid, node.type AS node_type, SUM(search_index.score * search_total.count) AS score, 'node' AS field_data_body_node_entity_type, 'search_test:page' AS view_name
FROM 
{node} node
LEFT JOIN {search_index} search_index ON node.nid = search_index.sid
LEFT JOIN {search_total} search_total ON search_index.word = search_total.word
WHERE (( (node.status = '1') AND( (search_index.type = 'node') AND( (search_index.word = 'test') ))))
GROUP BY search_index.sid, score, node_title, nid, node_type, field_data_body_node_entity_type, view_name
HAVING (( (COUNT(*) >= '1') ))
ORDER BY score DESC
LIMIT 10 OFFSET 0
5 голосов | спросил Daniel Rogers 20 Maypm15 2015, 22:34:57

1 ответ


0

Есть несколько вещей, влияющих на разницу в результатах. Я уверен, что вы заметили, что запросы немного отличаются.

  • Первой и основной проблемой является то, что главная таблица модуля search search_index, поэтому каждая строка построена вокруг записей в этой таблице и затем соединяется вовнутрь, чтобы получить дополнительную информацию. Ваш view построен вокруг таблицы node и присоединился к другому направлению для поиска индекса.
  • В основном поиске используются внутренние соединения для получения данных узла, что будет более ограничено в его наборах результатов (см. этот ответ .)
  • Таблица search_dataset не связана с поиском запросов (см. этот ответ для объяснения причин.)
  • Основной поиск умножает результаты поиска по релевантности, что не должно влиять на их ранжирование, но выглядит запутанным. См. Строку 496-500 из search.extender.inc.

Я знаю, что ответил только на первую половину вашего вопроса, но надеюсь, что это поможет. Я не уверен, что можно получить представление, чтобы точно отразить результаты поиска без значительной настройки.

ответил Jesse Firestone 9 +03002015-10-09T19:01:07+03:00312015bEurope/MoscowFri, 09 Oct 2015 19:01:07 +0300 2015, 19:01:07

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132