🚀 性能
你所寻找的

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

性价比高的搜索引擎

Manticore Search 是最用户友好、可访问且 性价比高的搜索数据库。我们在效率方面表现出色,即使在资源最少的小型 VM/容器设置中,如 1 核心和 1GB 内存,同时 仍能提供令人印象深刻的速度 。Manticore Search 旨在处理广泛的用例,并为各种规模的操作提供强大的性能和资源效率。请在 这里 探索我们的基准测试,看看 Manticore 在各种场景中如何超越其他解决方案。

性价比高的搜索引擎

向量搜索

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

向量搜索

Elasticsearch 替代品

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

Elasticsearch 替代品

专业服务

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

咨询:节省您团队的时间和资源,同时更快地构建
微调:确保您的实例以最佳性能运行
功能开发:获取根据您的业务需求量身定制的自定义功能

了解更多关于 我们完整的服务范围 .

专业服务

真正的开源

我们热爱开源。Manticore Search 和其他公开可用的 Manticore 产品都是免费的,并且根据 OSI 批准的开源许可证 发布。欢迎在 GitHub 上贡献。

真正的开源

易于使用

查看如何使用流行编程语言轻松使用 Manticore Search
1分钟 内用几行代码设置并 执行搜索

curl localhost:9308/_bulk -H "Content-Type: application/x-ndjson" -d '
{ "index" : { "_index" : "tbl" } }
{ "title" : "斜挎包", "price": 19.85}
{ "index" : { "_index" : "tbl" } }
{ "title" : "超细纤维床单", "price": 19.99}
'

# 带高亮的搜索
curl localhost:9308/search -d '
{
  "index": "tbl",
  "query": {
    "match": {
      "*": "包"
    }
  },
  "highlight": {
    "fields": ["title"]
  }
}'
create table products(title text, price float) morphology='stem_en';
insert into products(title,price) values ('带流苏的斜挎包', 19.85), ('超细纤维床单套装', 19.99), ('宠物毛发去除手套', 7.99);
select id, highlight(), price from products where match('去除毛发');
curl "localhost:9308/sql?mode=raw" -d "INSERT INTO mytable (title, price) VALUES ('斜挎包', 19.85), ('超细纤维床单', 19.99)"

curl localhost:9308/sql -d "SELECT *, HIGHLIGHT() FROM mytable WHERE MATCH('包')"
use Manticoresearch\{Index, Client};
$client = new Client(['host'=>'127.0.0.1','port'=>9308]);
$table = $client->index('products');
$table->addDocument(['title' => '斜挎包', 'price' => 19.85]);
$table->addDocument(['title' => '超细纤维床单', 'price' => 19.99]);

# 带高亮的搜索
$result = $table->search('包')->highlight(['title'])->get();
var Manticoresearch = require('manticoresearch');
var client= new Manticoresearch.ApiClient()
client.basePath="http://127.0.0.1:9308";
indexApi = new Manticoresearch.IndexApi(client);
searchApi = new Manticoresearch.SearchApi(client);
res = await indexApi.insert({"index": "products", "doc" : {"title" : "带流苏的斜挎包", "price" : 19.85}});
res = await indexApi.insert({"index": "products", "doc" : {"title" : "超细纤维床单套装", "price" : 19.99}});
res = await searchApi.search({"index": "products", "query": {"query_string": "@title 包"}, "highlight": {"fieldnames": ["title"]}});
import {Configuration, IndexApi, SearchApi, UtilsApi} from "manticoresearch-ts";
const config = new Configuration({
	basePath: 'http://localhost:9308',
})
const indexApi = new IndexApi(config);
const searchApi = new SearchApi(config);
await indexApi.insert({index : 'products', id : 1, doc : {title : '带流苏的斜挎包'}});
await indexApi.insert({index : 'products', id : 2, doc : {title : '宠物毛发去除手套'}});
const res = await searchApi.search({
	index: 'products',
	query: { query_string: {'包'} },
});
import manticoresearch
config = manticoresearch.Configuration(
    host = "http://127.0.0.1:9308"
)
client = manticoresearch.ApiClient(config)
indexApi = manticoresearch.IndexApi(client)
searchApi = manticoresearch.SearchApi(client)
indexApi.insert({"index": "products", "doc" : {"title" : "带流苏的斜挎包", "price" : 19.85}})
indexApi.insert({"index": "products", "doc" : {"title" : "宠物毛发去除手套", "price" : 7.99}})
searchApi.search({"index": "products", "query": {"query_string": "@title 包"}, "highlight":{"fieldnames":["title"]}})
import manticoresearch
config = manticoresearch.Configuration(
    host = "http://127.0.0.1:9308"
)
with manticoresearch.ApiClient(configuration) as client:
    indexApi = manticoresearch.IndexApi(client)
    searchApi = manticoresearch.SearchApi(client)
    await indexApi.insert({"index": "products", "doc" : {"title" : "带流苏的斜挎包", "price" : 19.85}})
    await indexApi.insert({"index": "products", "doc" : {"title" : "宠物毛发去除手套", "price" : 7.99}})
    await searchApi.search({"index": "products", "query": {"query_string": "@title 包"}, "highlight":{"fieldnames":["title"]}})
import (
	"context"
	manticoreclient "github.com/manticoresoftware/manticoresearch-go"
)
configuration := manticoreclient.NewConfiguration()
configuration.Servers[0].URL = "http://localhost:9308"
apiClient := manticoreclient.NewAPIClient(configuration)

tableName := "products"
indexDoc := map[string]interface{} {"title": "带流苏的斜挎包"}
indexReq := manticoreclient.NewInsertDocumentRequest(tableName, indexDoc)
indexReq.SetId(1)
apiClient.IndexAPI.Insert(context.Background()).InsertDocumentRequest(*indexReq).Execute();

indexDoc = map[string]interface{} {"title": "宠物毛发去除手套"}
indexReq = manticoreclient.NewInsertDocumentRequest(tableName, indexDoc)
indexReq.SetId(2)
apiClient.IndexAPI.Insert(context.Background()).InsertDocumentRequest(*indexReq).Execute()

searchRequest := manticoreclient.NewSearchRequest(tableName)
query := map[string]interface{} {"query_string": "bag"}
searchRequest.SetQuery(query)

res, _, _ := apiClient.SearchAPI.Search(context.Background()).SearchRequest(*searchRequest).Execute()
import com.manticoresearch.client.*;
import com.manticoresearch.client.model.*;
import com.manticoresearch.client.api.*;
ApiClient client = Configuration.getDefaultApiClient();
client.setBasePath("http://127.0.0.1:9308");
IndexApi indexApi = new IndexApi(client);
SearchApi searchApi = new SearchApi(client);

// Insert document 1
InsertDocumentRequest newdoc = new InsertDocumentRequest();
HashMap<String,Object> doc = new HashMap<String,Object>(){{
    put("title", "Crossbody Bag with Tassel");
    put("price", 19.85);
}};
newdoc.index("products").setDoc(doc);
sqlresult = indexApi.insert(newdoc);

// Insert document 2
newdoc = new InsertDocumentRequest();
doc = new HashMap<String,Object>(){{
    put("title","microfiber sheet set");
    put("price", 19.99);
}};
newdoc.index("products").setDoc(doc);
sqlresult = indexApi.insert(newdoc);

// Search
query = new HashMap<String,Object>();
query.put("query_string", "@title bag");
searchRequest = new SearchRequest();
searchRequest.setIndex("products");
searchRequest.setQuery(query);

Highlight highlight = new Highlight();
highlight.setFieldnames( Arrays.asList("title") );
searchRequest.setHighlight(highlight);

searchResponse = searchApi.search(searchRequest);
use manticoresearch::{
  apis::{
    {configuration::Configuration,IndexApi,IndexApiClient,SearchApi,SearchApiClient}
  },
  models::{InsertDocumentRequest,SearchRequest,SearchQuery,Highlight}
};

let api_config = Arc::new(Configuration::new());
let index_api = IndexApiClient::new(api_config.clone());
let search_api = SearchApiClient::new(api_config.clone());

// Create documents 
let doc = serde_json::json!({"title": "Crossbody Bag with Tassel", "price": 19.85});
let insert_request = InsertDocumentRequest {
  table: "products",
  doc: doc,
  ..Default::default()
};
  
let _ = index_api.insert(insert_request).await;

// Prepare search request
let query = SearchQuery {
   query_string: Some(serde_json::json!("Star").into()),
   ..Default::default()
};

let highlight = Highlight {
   fields: Some(serde_json::json!(["title"]).into()),
   ..Default::default()
};

let mut options = HashMap::new();
options.insert("cutoff".to_string(), serde_json::json!(5));
options.insert("ranker".to_string(), serde_json::json!("bm25"));

let search_request = SearchRequest {
  table: "movies".to_string(),
  query: Some(Box::new(query)),
  highlight: Some(Box::new(highlight)),
  options: Some(serde_json::json!(options)),
  ..Default::default()
};

 // Perform search
 let search_response = search_api.search(search_request).await;

人们对 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 切换过来。 一些背景: - 索引文档:~100m - 索引字节:35TiB(未来,我们计划将此数字增加到 100)

sabnak
sabnak

我使用 manticore search 和列式库——这是一个完整且简单的搜索解决方案,涵盖了我所有的用例。它快速、可扩展、开源,并支持 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 切换过来。 一些背景: - 索引文档:~100m - 索引字节:35TiB(未来,我们计划将此数字增加到 100)

sabnak
sabnak

我使用 manticore search 和列式库——这是一个完整且简单的搜索解决方案,涵盖了我所有的用例。它快速、可扩展、开源,并支持 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