我总结了Apache Solr和Elasticsearch查询语法的不同之处
这篇文章是TLB Enjoy开发者圣诞日历2022的第23天的文章。
首先
因为经常听到全文搜索引擎的是Apache Solr和Elasticsearch,但很少看到有关比较其查询语法差异的示例文章,所以我写了一篇来试试看。
阅读这篇文章就可以理解的事情。
大致上,在Apache Solr和Elasticsearch中,搜索查询的方式有所不同哦~
首先,Apache Solr和Elasticsearch是什么?
这两个搜索引擎都是基于Lucene库的开源搜索引擎,可用于创建、搜索和分析大量数据的索引。
有什么不同之处
虽然有很多不同之处,但其中一个主要的区别可以是查询语句的语法。
Elasticsearch采用基于JSON的查询语法,可以指定各种搜索条件,如全文搜索、过滤、聚合等。
另一方面,Apache Solr采用基于搜素库”Lucene”的查询语法称为”Lucene Query Syntax”。
虽然与Elasticsearch的语法相似,但对于熟悉传统搜索引擎如Google的用户来说,可能更容易上手。
我们来比较一下查询样例。
我们正在通过示例比较Apache Solr和Elasticsearch在进行相同内容搜索时的区别。
整个文档搜索
如果要在标题中搜索关键词“饥饿的毛虫”,
q=title:はらぺこあおむし
{
"query": {
"match": {
"title": "はらぺこあおむし"
}
}
}
范围搜索
如果以「100以上200以下」作为条件搜索价格的值的话
q=price:[100 TO 200]
{
"query": {
"range": {
"price": {
"gte": 100,
"lte": 200
}
}
}
}
排序搜索
如果以价格“升序”、发布日期“降序”进行排序的话。
q=*:*&sort=price asc, date_published desc
{
"query": {
"match_all": {}
},
"sort": [
{ "price": "asc" },
{ "date_published": "desc" }
]
}
筛选搜索
如果想要在标题中包含关键词“饿虫饿得慌”并且价格在“100至200”之间的数据,请进行搜索。
q=title:はらぺこあおむし&fq=price:[100 TO 200]
{
"query": {
"bool": {
"must": {
"match": {
"title": "はらぺこあおむし"
}
},
"filter": {
"range": {
"price": {
"gte": 100,
"lte": 200
}
}
}
}
}
}
多重搜索
如果想要搜索包含标题关键词为「饿了吗的小毛虫」,价格在「100〜200」之间,不包含类别为「小说」的数据,并且作者为「艾利克·卡尔」或「埃里克·卡尔」的情况。
q=title:はらぺこあおむし AND price:[100 TO 200] AND NOT category:novel AND (author:エリック・カール OR author:eric carle)
{
"query": {
"bool": {
"must": [
{ "match": { "title": "はらぺこあおむし" } },
{ "range": { "price": { "gte": 100, "lte": 200 } } }
],
"must_not": {
"match": { "category": "novel" }
},
"should": [
{ "match": { "author": "エリック・カール" } },
{ "match": { "author": "eric carle" } }
]
}
}
}
结束
马上就到年底了,是吧。
因为圣诞节快到了,我在找圣诞风格的绘本,结果选了《饥饿的毛毛虫》。
明天24号是圣诞夜,@kdr250的文章将会发布!