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

🚀 性能
你正在寻找的

性能驱动 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 localhost:9308/_bulk -H "Content-Type: application/x-ndjson" -d '
{ "index" : { "_index" : "tbl" } }
{ "title" : "Crossbody Bag", "price": 19.85}
{ "index" : { "_index" : "tbl" } }
{ "title" : "microfiber sheet", "price": 19.99}
'

# Search with highlighting
curl localhost:9308/search -d '
{
  "index": "tbl",
  "query": {
    "match": {
      "*": "bag"
    }
  },
  "highlight": {
    "fields": ["title"]
  }
}'
create table products(title text, price float) morphology='stem_en';
insert into products(title,price) values ('Crossbody Bag with Tassel', 19.85), ('microfiber sheet set', 19.99), ('Pet Hair Remover Glove', 7.99);
select id, highlight(), price from products where match('remove hair');
curl "localhost:9308/sql?mode=raw" -d "INSERT INTO mytable (title, price) VALUES ('Crossbody Bag', 19.85), ('microfiber sheet', 19.99)"

curl localhost:9308/sql -d "SELECT *, HIGHLIGHT() FROM mytable WHERE MATCH('bag')"
use Manticoresearch\{Index, Client};
$client = new Client(['host'=>'127.0.0.1','port'=>9308]);
$table = $client->index('products');
$table->addDocument(['title' => 'Crossbody Bag', 'price' => 19.85]);
$table->addDocument(['title' => 'microfiber sheet', 'price' => 19.99]);

# Search with highlighting
$result = $table->search('bag')->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" : "Crossbody Bag with Tassel", "price" : 19.85}});
res = await indexApi.insert({"index": "products", "doc" : {"title" : "microfiber sheet set", "price" : 19.99}});
res = await searchApi.search({"index": "products", "query": {"query_string": "@title bag"}, "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 : 'Crossbody Bag with Tassel'}});
await indexApi.insert({index : 'products', id : 2, doc : {title : 'Pet Hair Remover Glove'}});
const res = await searchApi.search({
	index: 'products',
	query: { query_string: {'bag'} },
});
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" : "Crossbody Bag with Tassel", "price" : 19.85}})
indexApi.insert({"index": "products", "doc" : {"title" : "Pet Hair Remover Glove", "price" : 7.99}})
searchApi.search({"index": "products", "query": {"query_string": "@title bag"}, "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" : "Crossbody Bag with Tassel", "price" : 19.85}})
    await indexApi.insert({"index": "products", "doc" : {"title" : "Pet Hair Remover Glove", "price" : 7.99}})
    await searchApi.search({"index": "products", "query": {"query_string": "@title bag"}, "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": "Crossbody Bag with Tassel"}
indexReq := manticoreclient.NewInsertDocumentRequest(tableName, indexDoc)
indexReq.SetId(1)
apiClient.IndexAPI.Insert(context.Background()).InsertDocumentRequest(*indexReq).Execute();

indexDoc = map[string]interface{} {"title": "Pet Hair Remover Glove"}
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切换过来,因为它的功能有限。 一些背景信息: - 索引文档:约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