🚀 性能
你正在寻找的
性能驱动 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 如何在 各种用例 中提升搜索速度。
专业服务
虽然 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 的评价
不要只听我们的,听听我们可爱的用户怎么说!











