alnv / prosearch-indexer-contao-adapter-bundle
Contao Search Pro // Elasticsearch
Requires
- php: ^8.1
- ext-curl: *
- contao/core-bundle: ~4.13 || ~5.0
- elasticsearch/elasticsearch: ^8.12
- fusonic/opengraph: ^2.3
- guzzlehttp/guzzle: ^7.8
- menatwork/contao-multicolumnwizard-bundle: ^3.6
- phpoffice/phpspreadsheet: ^1.29 || ^2.2
- smalot/pdfparser: ^2.8
This package is auto-updated.
Last update: 2024-09-24 07:35:00 UTC
README
为 Contao 4.9, 4.13 和 Contao 5 提供基于 Elasticsearch 的专业搜索
随着在线内容的不断增长,快速找到相关且重要的内容变得越来越有挑战性。这正是 Contao Search Pro 发挥作用的地方。它基于先进的 Elasticsearch 技术,并配备了许多实用功能。
- 定义自己的标签
- 在搜索结果中进行筛选
- 保存输入的搜索词
- 统计信息
- 搜索建议
- 您是否指的是…?
- 图片预览
- 搜索 PDF 文档
- 同义词
更多信息: https://www.sineos.de/contao/contao-search-pro
安装
通过 Contao-Manager: https://extensions.contao.org/?q=pro&pages=1&p=alnv%2Fprosearch-indexer-contao-adapter-bundle
或者使用 composer.json
composer require alnv/prosearch-indexer-contao-adapter-bundle
设置
安装后,在后台会出现一个新的导航点“Elasticsearch”。首先,您需要输入访问数据。点击“访问数据”,然后在“包”选项中选择“API密钥”。接下来,输入您的API令牌和域名许可证密钥。
免费试用
您可以通过创建一个演示访问来随时免费试用此扩展: https://app.sineos.de/。访问有效期为30天。
页面结构
在“页面类型”为“网站起点”的页面结构中,有更多的 Elasticsearch 设置。您可以为您的网站选择合适的分析器。
什么是分析器?
在 Elasticsearch 中,分析器是一种负责文本分析的特性。它用于将文档中的文本数据分解成有意义的标记(单词或短语),并对这些标记进行索引和优化,以便进行后续的搜索查询。Elasticsearch 支持多种分析器,可以根据您应用程序的具体要求进行调整。
分类
在“页面类型”为“常规页面”的页面结构中,可以输入分类。这些分类以后可以用于搜索结果的筛选。
您还可以直接在模板中指定分类,例如在新闻或活动模块中。
<?php // news_full.html5 $GLOBALS['TL_HEAD']['search:type'] = '<meta name="search:type" content="news"/>'; ?>
分类必须小写,且不得包含特殊字符(包括“-”和“_”)。
只有在重新构建搜索索引后,search:type 才会被接受。
前端模块
有两种前端模块:“Elasticsearch”和“Elasticsearch 类型预测”。创建您所需的模块并将其绑定到页面中。
构建搜索索引
现在您可以构建搜索索引了。转到系统维护,然后点击“更新搜索索引”。页面索引完成后,您可以在前端调用并测试搜索。
输入分类文本
索引后,您可以在 Elasticsearch → 分类下找到分类。您可以看到找到的所有分类列表。此外,您可以为每个分类指定标签或翻译分类。
同义词
可以针对每个搜索词创建同义词。您可以在 Elasticsearch → 同义词中进行此操作。创建一个同义词,并在“搜索词”中输入要搜索的内容,例如“职业”。在“同义词”下输入搜索词的其他名称,例如“工作”,“职位”,“工作”等。如果网站访客在搜索框中输入了这些同义词之一,则将搜索“职业”。
统计信息
这里您可以查看搜索词的概览。
显示图片
搜索图片通过 Open Graph Meta 标签维护。最好为 Contao 安装一个 Open Graph 扩展,或者为每个页面分配一个 og:image 标签。og:image 将在重新构建搜索索引后才能被接受。
<meta property=“og:image“ content="url"/>
开发者
AJAX 查询
以下代码是一段 JavaScript 脚本,它向服务器发送搜索请求,并以 JSON 格式接收结果。这些结果可以在自己的前端应用程序中使用。该代码使用 XMLHttpRequest
发送 POST 请求并处理响应。
<script> (function () { // Definieren der Suchanfrage let strQuery = "Meine Anfrage"; // Das ist eure Suchabfrage // Definieren der Parameter für die Anfrage let strParams = "module=28&root=33"; // Es müssen zwei Parameter übergeben werden: // 1. "module": Die ID des Frontend-Moduls // 2. "root": Die Root-ID in der Seitenstruktur // Erstellen eines neuen XMLHttpRequest-Objekts let objXHttp = new XMLHttpRequest(); // Festlegen einer Funktion, die aufgerufen wird, wenn sich der Zustand des XMLHttpRequest-Objekts ändert objXHttp.onreadystatechange = function() { // Überprüfen, ob die Anfrage abgeschlossen ist (readyState === 4) und ob sie erfolgreich war (status === 200) if (this.readyState === 4 && this.status === 200) { // Parsen der JSON-Antwort let json = JSON.parse(this.responseText); // Hier könnt ihr mit den Daten weiterarbeiten ;) console.log(json); // Beispiel: Ausgabe der Daten in der Konsole } }; // Öffnen der POST-Anfrage mit der URL und den Query-Parametern objXHttp.open("POST", "/elastic/search/results?query=" + encodeURIComponent(strQuery), true); // Setzen des Content-Type-Headers für die Anfrage objXHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); // Senden der Anfrage mit den Parametern objXHttp.send(strParams); })(); </script>
-
定义搜索查询和参数:
let strQuery = "Meine Anfrage"; let strParams = "module=28&root=33";
在这里定义搜索查询和所需的参数(
module
和root
)。 -
创建 XMLHttpRequest 对象:
let objXHttp = new XMLHttpRequest();
-
设置回调函数:
objXHttp.onreadystatechange = function() { if (this.readyState === 4 && this.status === 200) { let json = JSON.parse(this.responseText); console.log(json); } };
每次 XMLHttpRequest 对象的状态发生变化时都会调用此函数。如果请求完成且成功,将解析 JSON 响应并在控制台输出。
-
打开 POST 请求:
objXHttp.open("POST", "/elastic/search/results?query=" + encodeURIComponent(strQuery), true);
请求被打开,其中 URL 包含搜索查询作为查询参数。
-
设置 Content-Type 头部:
objXHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
Content-Type 头部被设置为
application/x-www-form-urlencoded
。 -
发送请求:
objXHttp.send(strParams);
请求带参数发送。
使用此脚本可以向服务器发送搜索请求,并加载 JSON 格式的结果,以便在您自己的前端应用程序中使用。