alnv/prosearch-indexer-contao-adapter-bundle

Contao Search Pro // Elasticsearch

安装: 516

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 2

类型:contao-bundle

2.5.4 2024-09-04 14:51 UTC

README

为 Contao 4.9, 4.13 和 Contao 5 提供基于 Elasticsearch 的专业搜索

随着在线内容的不断增长,快速找到相关且重要的内容变得越来越有挑战性。这正是 Contao Search Pro 发挥作用的地方。它基于先进的 Elasticsearch 技术,并配备了许多实用功能。

  • 定义自己的标签
  • 在搜索结果中进行筛选
  • 保存输入的搜索词
  • 统计信息
  • 搜索建议
  • 您是否指的是…?
  • 图片预览
  • 搜索 PDF 文档
  • 同义词

IMAGE ALT TEXT HERE

更多信息: 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>
  1. 定义搜索查询和参数:

    let strQuery = "Meine Anfrage";
    let strParams = "module=28&root=33";

    在这里定义搜索查询和所需的参数(moduleroot)。

  2. 创建 XMLHttpRequest 对象:

    let objXHttp = new XMLHttpRequest();
  3. 设置回调函数:

    objXHttp.onreadystatechange = function() {
        if (this.readyState === 4 && this.status === 200) {
            let json = JSON.parse(this.responseText);
            console.log(json);
        }
    };

    每次 XMLHttpRequest 对象的状态发生变化时都会调用此函数。如果请求完成且成功,将解析 JSON 响应并在控制台输出。

  4. 打开 POST 请求:

    objXHttp.open("POST", "/elastic/search/results?query=" + encodeURIComponent(strQuery), true);

    请求被打开,其中 URL 包含搜索查询作为查询参数。

  5. 设置 Content-Type 头部:

    objXHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

    Content-Type 头部被设置为 application/x-www-form-urlencoded

  6. 发送请求:

    objXHttp.send(strParams);

    请求带参数发送。

使用此脚本可以向服务器发送搜索请求,并加载 JSON 格式的结果,以便在您自己的前端应用程序中使用。