⚠️ 此页面为自动翻译,翻译可能不完美。

🚀 性能
你正在寻找的

性能驱动 Manticore Search 的开发。我们致力于实现 低响应时间,这对于分析大型数据集至关重要。吞吐量也是一个关键考虑因素,使 Manticore 能够每秒处理大量查询。Manticore Search 是 处理大数据和向量搜索的最快开源搜索引擎

成本效益高的搜索引擎

Manticore Search 是最用户友好、易于访问且 成本效益高的搜索数据库。我们在效率方面表现出色,即使在资源有限的小型 VM/容器设置上,例如 1 个核心和 1GB 内存仍然能提供令人印象深刻的性能 。Manticore Search 被设计用于处理各种使用场景,并为所有规模的操作提供强大的性能和资源效率。通过我们的基准测试 此处 查看 Manticore 在各种场景中如何超越其他解决方案。

成本效益高的搜索引擎

向量搜索

通过 Manticore Search 发现语义和向量搜索的强大功能。通过阅读我们的文章了解更多信息: Manticore 中的向量搜索将向量搜索集成到 GitHub

向量搜索

Elasticsearch 替代方案

Manticore Search 是 Elasticsearch 的强大替代方案。将其与 Logstash 和 Beats 集成,处理 10M Nginx 日志数据集时性能可提升高达 比 Elasticsearch 快 29 倍 。对于日志分析,Manticore 还能与 Kibana 无缝协作,提供更好的性能。在我们的比较中了解更多: Manticore Search 与 Elasticsearch 的日志分析对比 。探索 Manticore 如何在 各种用例 中提升搜索速度。

Elasticsearch 替代方案

专业服务

虽然 Manticore 是 100% 开源 的,但我们在这里帮助您充分利用它!

咨询服务:节省团队的时间和资源,同时加快开发速度
微调:确保您的实例以最佳性能运行
功能开发:获得根据您的业务需求定制的功能

了解更多关于 我们全面的服务

专业服务

真正的开源

我们热爱开源。Manticore Search 及其他公开可用的 Manticore 产品均可免费使用,并发布在 OSI 批准的开源许可证 下。欢迎在 GitHub 上进行贡献。

真正的开源

易于使用

看看如何用流行的编程语言轻松使用 Manticore Search
在不到 1 分钟的时间内,用几行代码完成设置和 搜索

curl -sS "http://127.0.0.1:9308/sql?mode=raw" -d "DROP TABLE IF EXISTS products"
curl -sS "http://127.0.0.1:9308/sql?mode=raw" -d "CREATE TABLE products(title text, price float) charset_table='non_cjk,chinese' morphology='icu_chinese'"

curl -sS "http://127.0.0.1:9308/_bulk" -H "Content-Type: application/x-ndjson" -d '
  { "index" : { "_index" : "products" } }
  { "title": "流苏斜挎包", "price": 19.85 }
  { "index" : { "_index" : "products" } }
  { "title": "超细纤维床单套装", "price": 19.99 }
  { "index" : { "_index" : "products" } }
  { "title": "宠物除毛手套", "price": 7.99 }
'

curl -sS "http://127.0.0.1:9308/search" -d '{
  "index": "products",
  "query": { "query_string": "@title 包" },
  "highlight": { "fields": ["title"] }
}'
mysql -P9306 -h0 -e "DROP TABLE IF EXISTS products"
mysql -P9306 -h0 -e "CREATE TABLE products(title text, price float) charset_table='non_cjk,chinese' morphology='icu_chinese'"

mysql -P9306 -h0 -e "INSERT INTO products (id, title, price) VALUES
  (1, '流苏斜挎包', 19.85),
  (2, '超细纤维床单套装', 19.99),
  (3, '宠物除毛手套', 7.99)"

mysql -P9306 -h0 -e "SELECT id, HIGHLIGHT(), price FROM products WHERE MATCH('@title 包')"
curl -sS "http://127.0.0.1:9308/sql?mode=raw" -d "DROP TABLE IF EXISTS products"
curl -sS "http://127.0.0.1:9308/sql?mode=raw" -d "CREATE TABLE products(title text, price float) charset_table='non_cjk,chinese' morphology='icu_chinese'"
curl -sS "http://127.0.0.1:9308/sql?mode=raw" -d "INSERT INTO products (id, title, price) VALUES (1,'流苏斜挎包',19.85),(2,'超细纤维床单套装',19.99),(3,'宠物除毛手套',7.99)"

curl -sS "http://127.0.0.1:9308/sql" -d "SELECT id, HIGHLIGHT(), price FROM products WHERE MATCH('@title 包')" 
<?php
require __DIR__ . '/vendor/autoload.php';

use Manticoresearch\Client;

$client = new Client(['host' => '127.0.0.1', 'port' => 9308]);
$table  = $client->table('products');

$table->drop(true);
$table->create([
   'title' => ['type' => 'text'],
   'price' => ['type' => 'float'],
]);

$table->addDocument(['title' => '流苏斜挎包', 'price' => 19.85], 1);
$table->addDocument(['title' => '超细纤维床单套装', 'price' => 19.99], 2);
$table->addDocument(['title' => '宠物除毛手套', 'price' => 7.99], 3);

$result = $table
    ->search('@title 包')
    ->highlight(['title'])
    ->get();

print_r($result);
const Manticoresearch = require('manticoresearch');

async function main() {
  const client = new Manticoresearch.ApiClient();
  client.basePath = 'http://127.0.0.1:9308';

  const indexApi = new Manticoresearch.IndexApi(client);
  const searchApi = new Manticoresearch.SearchApi(client);
  const utilsApi = new Manticoresearch.UtilsApi(client);

  await utilsApi.sql('DROP TABLE IF EXISTS products');
  await utilsApi.sql("CREATE TABLE products(title text, price float) charset_table='non_cjk,chinese' morphology='icu_chinese'");

  await indexApi.insert({ index: 'products', id: 1, doc: { title: '流苏斜挎包', price: 19.85 } });
  await indexApi.insert({ index: 'products', id: 2, doc: { title: '超细纤维床单套装', price: 19.99 } });
  await indexApi.insert({ index: 'products', id: 3, doc: { title: '宠物除毛手套', price: 7.99 } });

  const res = await searchApi.search({
    index: 'products',
    query: { query_string: '@title 包' },
    highlight: { fields: { title: {} } },
  });

  console.log(JSON.stringify(res, null, 2));
}

main().catch((err) => {
  console.error(err);
});
import {Configuration, IndexApi, SearchApi, UtilsApi} from "manticoresearch-ts";

async function main(): Promise<void> {
  const config = new Configuration({ basePath: "http://127.0.0.1:9308" });

  const utilsApi = new UtilsApi(config);
  const indexApi = new IndexApi(config);
  const searchApi = new SearchApi(config);

  await utilsApi.sql("DROP TABLE IF EXISTS products");
  await utilsApi.sql("CREATE TABLE products(title text, price float) charset_table='non_cjk,chinese' morphology='icu_chinese'");

  await indexApi.insert({ index: "products", id: 1, doc: { title: "流苏斜挎包", price: 19.85 } });
  await indexApi.insert({ index: "products", id: 2, doc: { title: "超细纤维床单套装", price: 19.99 } });
  await indexApi.insert({ index: "products", id: 3, doc: { title: "宠物除毛手套", price: 7.99 } });

  const res = await searchApi.search({
    index: "products",
    query: { query_string: "@title 包" },
    highlight: { fields: ["title"] },
  });

  console.log(JSON.stringify(res, null, 2));
}

main().catch(console.error);
from __future__ import annotations
from pprint import pprint

import manticoresearch

def main() -> None:
    config = manticoresearch.Configuration(host="http://127.0.0.1:9308")

    with manticoresearch.ApiClient(config) as client:
        index_api = manticoresearch.IndexApi(client)
        search_api = manticoresearch.SearchApi(client)
        utils_api = manticoresearch.UtilsApi(client)

        utils_api.sql("DROP TABLE IF EXISTS products")
        utils_api.sql("CREATE TABLE products(title text, price float) charset_table='non_cjk,chinese' morphology='icu_chinese'")

        index_api.insert({"index": "products", "id": 1, "doc": {"title": "流苏斜挎包", "price": 19.85}})
        index_api.insert({"index": "products", "id": 2, "doc": {"title": "超细纤维床单套装", "price": 19.99}})
        index_api.insert({"index": "products", "id": 3, "doc": {"title": "宠物除毛手套", "price": 7.99}})

        res = search_api.search(
            {
                "index": "products",
                "query": {"query_string": "@title 包"},
                "highlight": {"fields": {"title": {}}},
            }
        )
        pprint(res)

if __name__ == "__main__":
    main()
from __future__ import annotations
import asyncio
from pprint import pprint

import manticoresearch
        
async def main() -> None:
    config = manticoresearch.Configuration(host="http://127.0.0.1:9308")

    async with manticoresearch.ApiClient(config) as client:
        index_api = manticoresearch.IndexApi(client)
        search_api = manticoresearch.SearchApi(client)
        utils_api = manticoresearch.UtilsApi(client)

        await utils_api.sql("DROP TABLE IF EXISTS products")
        await utils_api.sql("CREATE TABLE products(title text, price float) charset_table='non_cjk,chinese' morphology='icu_chinese'")

        await index_api.insert({"index": "products", "id": 1, "doc": {"title": "流苏斜挎包", "price": 19.85}})
        await index_api.insert({"index": "products", "id": 2, "doc": {"title": "超细纤维床单套装", "price": 19.99}})
        await index_api.insert({"index": "products", "id": 3, "doc": {"title": "宠物除毛手套", "price": 7.99}})

        res = await search_api.search(
            {
                "index": "products",
                "query": {"query_string": "@title 包"},
                "highlight": {"fields": {"title": {}}},
            }
        )
        pprint(res)

if __name__ == "__main__":
    asyncio.run(main())
package main

import (
	"context"
	"encoding/json"
	"fmt"
	"os"

	Manticoresearch "github.com/manticoresoftware/manticoresearch-go"
)

func main() {
	ctx := context.Background()

	configuration := Manticoresearch.NewConfiguration()
	configuration.Servers[0].URL = "http://127.0.0.1:9308"
	apiClient := Manticoresearch.NewAPIClient(configuration)

	_, _, _ = apiClient.UtilsAPI.Sql(ctx).Body("DROP TABLE IF EXISTS products").Execute()
	_, _, _ = apiClient.UtilsAPI.Sql(ctx).Body("CREATE TABLE products(title text, price float) charset_table='non_cjk,chinese' morphology='icu_chinese'").Execute()

	docs := []struct {
		id    int64
		title string
		price float64
	}{
		{1, "流苏斜挎包", 19.85},
		{2, "超细纤维床单套装", 19.99},
		{3, "宠物除毛手套", 7.99},
	}

	for _, d := range docs {
		indexDoc := map[string]interface{}{
			"title": d.title,
			"price": d.price,
		}
		req := Manticoresearch.NewInsertDocumentRequest("products", indexDoc)
		req.SetId(d.id)

		if _, _, err := apiClient.IndexAPI.Insert(ctx).InsertDocumentRequest(*req).Execute(); err != nil {
			panic(err)
		}
	}

	searchRequest := Manticoresearch.NewSearchRequest("products")
	searchQuery := Manticoresearch.NewSearchQuery()
	searchQuery.QueryString = "@title 包"
	searchRequest.Query = searchQuery

	hl := Manticoresearch.NewHighlight()
	hl.Fields = map[string]interface{}{"title": map[string]interface{}{}}
	searchRequest.Highlight = hl

	resp, _, err := apiClient.SearchAPI.Search(ctx).SearchRequest(*searchRequest).Execute()
	if err != nil {
		panic(err)
	}

	b, _ := json.MarshalIndent(resp, "", "  ")
	fmt.Println(string(b))
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using ManticoreSearch.Api;
using ManticoreSearch.Client;
using ManticoreSearch.Model;

internal class Program
{
    private static void Main()
    {
        var baseUrl = "http://127.0.0.1:9308";

        var config = new Configuration { BasePath = baseUrl };

        using var httpClientHandler = new HttpClientHandler();
        using var httpClient = new HttpClient(httpClientHandler);

        var utilsApi = new UtilsApi(httpClient, config, httpClientHandler);
        var indexApi = new IndexApi(httpClient, config, httpClientHandler);
        var searchApi = new SearchApi(httpClient, config, httpClientHandler);

        utilsApi.Sql("DROP TABLE IF EXISTS products", true);
        utilsApi.Sql("CREATE TABLE products(title text, price float) charset_table='non_cjk,chinese' morphology='icu_chinese'", true);

        var docs = new[]
        {
            new Dictionary<string, object> { ["title"] = "流苏斜挎包", ["price"] = 19.85 },
            new Dictionary<string, object> { ["title"] = "超细纤维床单套装", ["price"] = 19.99 },
            new Dictionary<string, object> { ["title"] = "宠物除毛手套", ["price"] = 7.99 },
        };

        foreach (var doc in docs)
        {
            var insertRequest = new InsertDocumentRequest(Index: "products", Doc: doc);
            indexApi.Insert(insertRequest);
        }

        var searchRequest = new SearchRequest(Index: "products")
        {
            Query = new SearchQuery { QueryString = "@title 包" },
            Highlight = new Highlight { Fields = new List<string> { "title" } }
        };

        var searchResponse = searchApi.Search(searchRequest);
        Console.WriteLine(searchResponse);
    }
}
import com.manticoresearch.client.ApiClient;
import com.manticoresearch.client.ApiException;
import com.manticoresearch.client.api.IndexApi;
import com.manticoresearch.client.api.SearchApi;
import com.manticoresearch.client.api.UtilsApi;

public class ManticoreExample {
    public static void main(String[] args) throws ApiException {
        ApiClient client = new ApiClient();
        client.setBasePath("http://127.0.0.1:9308");

        IndexApi indexApi = new IndexApi(client);
        SearchApi searchApi = new SearchApi(client);
        UtilsApi utilsApi = new UtilsApi(client);

        utilsApi.sql("DROP TABLE IF EXISTS products", true);
        utilsApi.sql("CREATE TABLE products(title text, price float) charset_table='non_cjk,chinese' morphology='icu_chinese'", true);

        indexApi.insert("{"index":"products","id":1,"doc":{"title":"流苏斜挎包","price":19.85}}");
        indexApi.insert("{"index":"products","id":2,"doc":{"title":"超细纤维床单套装","price":19.99}}");
        indexApi.insert("{"index":"products","id":3,"doc":{"title":"宠物除毛手套","price":7.99}}");

        String searchRequest = "{"
            + ""index":"products","
            + ""query":{"query_string":"@title 包"},"
            + ""highlight":{"fields":{"title":{}}}"
            + "}";

        System.out.println(searchApi.search(searchRequest));
    }
}
use manticoresearch::apis::configuration::Configuration;
use manticoresearch::apis::{index_api, search_api, utils_api};
use manticoresearch::models::{
    Highlight, HighlightFieldOption, HighlightFields, SearchQuery, SearchRequest,
};
use serde_json::json;

fn main() {
    let mut config = Configuration::new();
    config.base_path = "http://127.0.0.1:9308".to_string();

    let _ = utils_api::sql(&config, "DROP TABLE IF EXISTS products", None);
    let _ = utils_api::sql(&config, "CREATE TABLE products(title text, price float) charset_table='non_cjk,chinese' morphology='icu_chinese'", None);

    let docs = [
        (1, "流苏斜挎包", 19.85),
        (2, "超细纤维床单套装", 19.99),
        (3, "宠物除毛手套", 7.99),
    ];

    for (id, title, price) in docs {
        let body = json!({
            "index": "products",
            "id": id,
            "doc": { "title": title, "price": price }
        });
        index_api::insert(&config, body, None).unwrap();
    }

    let query = SearchQuery {
        query_string: Some("@title 包".to_string()),
        ..Default::default()
    };

    let highlight = Highlight {
        fields: Some(HighlightFields {
            title: Some(HighlightFieldOption {
                ..Default::default()
            }),
        }),
        ..Default::default()
    };

    let req = SearchRequest {
        index: "products".to_string(),
        query: Box::new(query),
        highlight: Some(Box::new(highlight)),
        ..Default::default()
    };

    let resp = search_api::search(&config, req, None).unwrap();
    println!("{}", serde_json::to_string_pretty(&resp).unwrap());
}

人们关于 Manticore Search 的评价

不要只听我们的,听听我们可爱的用户怎么说!

我们每天依赖Manticore作为文本分析服务的骨干,利用其强大的核心引擎和Python API。Manticore团队的支持非常出色——他们总是响应迅速、知识渊博且乐于助人。 在众多优势中,我们特别欣赏: - 高效的大批量插入/更新,适用于高吞吐量操作。 - 无缝的容器集成,简化了部署和可扩展性。 - 灵活的match()功能,可实现精确且可定制的查询。 在评估了多个具有类似功能的解决方案后,我们选择了Manticore,因其无与伦比的灵活性和丰富的功能集。

orazs
orazs

我使用引擎本身以及Go和PHP客户端。我选择Manticore是因为它是开源的、易于集成、开发人员响应迅速,并且不需要太多硬件。非常积极的体验——引擎带来了巨大的性能提升,并为新服务打开了大门。

Alisher Rusinov
Alisher Rusinov

Flumtec

我喜欢Manticore搜索因其低资源消耗。Elasticsearch作为替代方案由于Java而更耗资源。文档可以更清晰地解释分面搜索和前缀搜索。总体而言,我非常喜欢它——我尚未在生产环境中使用,但很快就会使用。非常感谢社区引导我使用Manticore!

Roman
Roman

Python后端开发人员

我在工作中通过https://poisk.im/(我们使用Manticore的网站)了解到Manticore。文档很棒,产品速度快,总体来说很可靠——我会给它8分(满分10分)。我希望看到诸如关联搜索、向量搜索和模糊搜索等功能可以通过HTTP而非仅SQL提供。

Flild
Flild

Notissimus的后端开发人员

我们在寻找Meilisearch替代方案时发现了Manticore。在我们的用例中,它比Meilisearch更可靠、更灵活且更可预测。如果能在SQL模式下提供预处理语句并自动优化而无需均衡器,那就更好了。总体而言,一切都很不错。

Max Besogonov
Max Besogonov

@thermos的开发人员

我使用Manticore进行全文搜索,并且喜欢查询的速度。我会给它7分(满分10分)——在某些地方错误信息需要更清晰,但支持团队很棒,我相信这个项目会越来越好。

Ali Suliman
Ali Suliman

BeInMedia的开发人员

Manticoresearch速度快,即使在弱服务器上也能处理高负载,配置非常灵活。它非常稳定——我在生产环境中使用版本4,并准备迁移到版本9。如果缺少某些功能,我通常通过自定义代码处理。总体而言,我的体验非常积极——文档和Telegram支持频道能解决所有问题。

Yuri (godem111)
Yuri (godem111)

我们已经使用Manticore Search超过5年了。它灵活、易于设置,并且能很好地扩展大型索引。我们希望看到更多高级分组选项,如中位数,以及能够使用如month()和day()这样的函数并支持时区。总体而言,我们的体验非常积极——我们很久以前就从Sphinx切换过来,因为它的功能有限。 一些背景信息: - 索引文档:约1亿 - 索引字节:35TiB(未来我们计划将此数字增加到100)

sabnak
sabnak

我使用manticore search和columnar库——这是一个完整且易于使用的搜索解决方案,涵盖了我所有的用例。它速度快、可扩展、开源,并支持mysql协议和地理搜索。我会给它9分(满分10分)。我希望有更适合非专家的文档、更简单的数据导入以及可能的Parquet支持。在尝试了Sphinx和其他工具后,Manticore的表现更好。

blackrez
blackrez

Manticore最引人注目的特点之一是其惊人的速度。能够通过JSON接口与服务交互,为处理搜索查询提供了一种灵活且现代的方法,这与当前的开发实践非常契合。我对Manticore的整体体验有些复杂。一方面,我确实享受它带来的能力,特别是性能和JSON通信方法。这些方面显著提高了我项目的效率和适应性。另一方面,掌握Manticore需要深入研究其手册。学习曲线虽然不是不可逾越的,但需要大量时间和精力。活跃的社区和支持论坛也对解决我遇到的问题起到了重要作用。一个显著的挑战是其对SQL的强烈倾向,包括培训材料,这些虽然全面,但对习惯于JSON为中心系统的用户来说,学习路径较为陡峭。尽管有这些挑战,我的Manticore体验总体上是积极的。它提供的速度、灵活性和强大的搜索能力组合非常宝贵。展望未来,我希望看到更广泛的学习资源,既适合SQL专家,也适合习惯于JSON的用户。Manticore有潜力成为搜索技术领域中的多功能工具,我期待继续探索它的可能性。

THE-KONDRAT
THE-KONDRAT

我们每天依赖Manticore作为文本分析服务的骨干,利用其强大的核心引擎和Python API。Manticore团队的支持非常出色——他们总是响应迅速、知识渊博且乐于助人。 在众多优势中,我们特别欣赏: - 高效的大批量插入/更新,适用于高吞吐量操作。 - 无缝的容器集成,简化了部署和可扩展性。 - 灵活的match()功能,可实现精确且可定制的查询。 在评估了多个具有类似功能的解决方案后,我们选择了Manticore,因其无与伦比的灵活性和丰富的功能集。

orazs
orazs

我使用引擎本身以及Go和PHP客户端。我选择Manticore是因为它是开源的、易于集成、开发人员响应迅速,并且不需要太多硬件。非常积极的体验——引擎带来了巨大的性能提升,并为新服务打开了大门。

Alisher Rusinov
Alisher Rusinov

Flumtec

我喜欢Manticore搜索因其低资源消耗。Elasticsearch作为替代方案由于Java而更耗资源。文档可以更清晰地解释分面搜索和前缀搜索。总体而言,我非常喜欢它——我尚未在生产环境中使用,但很快就会使用。非常感谢社区引导我使用Manticore!

Roman
Roman

Python后端开发人员

我在工作中通过https://poisk.im/(我们使用Manticore的网站)了解到Manticore。文档很棒,产品速度快,总体来说很可靠——我会给它8分(满分10分)。我希望看到诸如关联搜索、向量搜索和模糊搜索等功能可以通过HTTP而非仅SQL提供。

Flild
Flild

Notissimus的后端开发人员

我们在寻找Meilisearch替代方案时发现了Manticore。在我们的用例中,它比Meilisearch更可靠、更灵活且更可预测。如果能在SQL模式下提供预处理语句并自动优化而无需均衡器,那就更好了。总体而言,一切都很不错。

Max Besogonov
Max Besogonov

@thermos的开发人员

我使用Manticore进行全文搜索,并且喜欢查询的速度。我会给它7分(满分10分)——在某些地方错误信息需要更清晰,但支持团队很棒,我相信这个项目会越来越好。

Ali Suliman
Ali Suliman

BeInMedia的开发人员

Manticoresearch速度快,即使在弱服务器上也能处理高负载,配置非常灵活。它非常稳定——我在生产环境中使用版本4,并准备迁移到版本9。如果缺少某些功能,我通常通过自定义代码处理。总体而言,我的体验非常积极——文档和Telegram支持频道能解决所有问题。

Yuri (godem111)
Yuri (godem111)

我们已经使用Manticore Search超过5年了。它灵活、易于设置,并且能很好地扩展大型索引。我们希望看到更多高级分组选项,如中位数,以及能够使用如month()和day()这样的函数并支持时区。总体而言,我们的体验非常积极——我们很久以前就从Sphinx切换过来,因为它的功能有限。 一些背景信息: - 索引文档:约1亿 - 索引字节:35TiB(未来我们计划将此数字增加到100)

sabnak
sabnak

我使用manticore search和columnar库——这是一个完整且易于使用的搜索解决方案,涵盖了我所有的用例。它速度快、可扩展、开源,并支持mysql协议和地理搜索。我会给它9分(满分10分)。我希望有更适合非专家的文档、更简单的数据导入以及可能的Parquet支持。在尝试了Sphinx和其他工具后,Manticore的表现更好。

blackrez
blackrez

Manticore最引人注目的特点之一是其惊人的速度。能够通过JSON接口与服务交互,为处理搜索查询提供了一种灵活且现代的方法,这与当前的开发实践非常契合。我对Manticore的整体体验有些复杂。一方面,我确实享受它带来的能力,特别是性能和JSON通信方法。这些方面显著提高了我项目的效率和适应性。另一方面,掌握Manticore需要深入研究其手册。学习曲线虽然不是不可逾越的,但需要大量时间和精力。活跃的社区和支持论坛也对解决我遇到的问题起到了重要作用。一个显著的挑战是其对SQL的强烈倾向,包括培训材料,这些虽然全面,但对习惯于JSON为中心系统的用户来说,学习路径较为陡峭。尽管有这些挑战,我的Manticore体验总体上是积极的。它提供的速度、灵活性和强大的搜索能力组合非常宝贵。展望未来,我希望看到更广泛的学习资源,既适合SQL专家,也适合习惯于JSON的用户。Manticore有潜力成为搜索技术领域中的多功能工具,我期待继续探索它的可能性。

THE-KONDRAT
THE-KONDRAT

安装Manticore Search

安装Manticore Search