全文检索:search

User 69e88e27

发布于:2025-07-01

使用search tag标签进行分词检索数据

1. 基本用法

{% search collection_name, keywords: '关键词', by_user: true %}
  <!-- 这里自定义搜索结果的展示 -->
  {% for page in search.pages %}
    <li><a href="{{ page.url }}">{{ page.link_text }}</a></li>
  {% endfor %}
{% endsearch %}

2. 参数说明

参数名

描述

类型

默认值

示例

collection_name

要搜索的pages数据集合

PagesDrop

site.pages  站点下所有页面进行检索

page.children 当前页面下的仅下级页面

page.pages 当前页面下的全部页面

keywords

搜索关键词

字符串或变量

by_user

标记是否为用户检索,若为true将自动记录用户检索记录与统计数据

Boolean

true

3. 搜索结果可用属性

{% search ... %}{% endsearch %} 包裹的内容中,可通过 search 对象获取以下参数:

  • search.pages
    搜索结果页面集合,可用于遍历。

  • search.keywords
    本次搜索的关键词。

  • search.extends
    额外扩展信息(如有)。

4. 直达跳转(自动处理)

如果搜索结果为直达,会自动跳转到目标页面。

由站点页面管理,搜索记录/自定义搜索结果 中配置

5. 设置模板可用于分词检索的动态变量

在模板文件的 settings_schema 中添加 searchable: true

<!-- templates/page.liquid -->

{% schema %}
{
  "name": "Help Center",
  "settings": [
    {
      "id": "description_en",
      "type": "textarea",
      "label": "英文描述",
      "searchable": true # 开启后,创建的页面中填写此值的,在前端可直接分词搜索
    }
  ]
}
{% endschema %}

6. 示例

- 目标:在某栏目页面中实现筛选、搜索功能
  - 可筛选页面动态字段(由模版settings中自行开启): tags (array[tag])、 category(string))
  - 可搜索页面内容:页面标题、内容等, 由url中获取params 提供的关键词进行搜索
- 实现方案:通过query tag + search tag,共同处理
- 页面模版中:templates/articles_channel.liquid

<!-- 通过 query进行动态字段过滤数据 -->
{% query pages1 from site.pages %}
  {
    "where": {
      "tags_array_cont_any": ["faq", "help"]
      "category_eq": "会议"
    }
  }
{% endquery %}

<!-- 通过 search 对 pages1 结果进行全文搜索, 并渲染结果 -->
{% search pages1, keywords: params[:q] %}
  <ul>
    {% for page in search.pages %}
      <li><a href="{{ page.url }}">{{ page.link_text }}</a></li>
    {% endfor %}
  </ul>
{% endsearch %}

提交反馈