solr(2)solrcloud7.3.1使用并行sql接口操作索引

介绍

solr的并行接口,说直白些,就是为solr全文索引进行无缝集成,使我们可以像操作数据库那样使用sql操作solr。目前,solr并行sql接口只支持solrcloud。

solrcloud的集合(collection)对应数据库中的表(table)表名不区分大小写。SQL查询中的列名直接映射到要查询的集合(collection)的Solr索引中的字段。这些标识符区分大小写。支持别名,可在ORDER BY子句中引用。

使用并行SQL接口查询示例

1)查询id返回20条数据

select id from techproducts limit 20;

2)查询集合名为techproducts中多个字段

SELECT manu as mfr, price as retail FROM techproducts;

3)查询字段cat所有数据

select cat from techproducts;

4)查询所有name字段为’Jhereg’
select * from techproducts where name=’Jhereg’;

5)查询所有数据(我使用的是测试数据,下面语句查询,有时会报错.可能是链接数据库客户端查询的时候提前关闭了链接导致的错误,可能是由于分号导致的。)
select * from techproducts;

DbVisualizer 10.0.13 工具使用查询solr

1.安装

DbVisualizer 10.0.13 这个工具默认是免费版,它的pro版本是收费的,免费版就够我们测试和学习的了。同时它还支持其他的客户端连接工具。我们去官网下载安装即可,如果是学习我觉得没有必要购买pro版本
下载地址:
https://www.dbvis.com/download/10.0

2.配置

http://lucene.apache.org/solr/guide/7_3/solr-jdbc-dbvisualizer.html

solr中的sql语法

1)支持转义保留字,这就意味着,我们字段如果是sql保留字段,我们可以通过引号来转义。

select from from emails

2)select语句

SELECT fieldA as fa, fieldB as fb, fieldC as fc FROM tableA WHERE fieldC = ‘term1 term2’ ORDER BY fa desc LIMIT 100

3)where语句,WHERE子句必须在谓词的一侧有一个字段。不支持两个常量(5 < 10)或两个字段(fielda > fieldb)。子查询也不受支持。

WHERE子句允许将Solr的搜索语法注入到SQL查询中

select * from techproducts where name=’Black Cauldron’

WHERE fieldC = ‘term1 term2’

WHERE fieldC = ‘(term1 term2)’

WHERE fieldC = ‘[0 TO 100]’

WHERE ((fieldC = ‘term1’ AND fieldA = ‘term2’) OR (fieldB = ‘term3’))

WHERE (fieldA = ‘term1’) AND NOT (fieldB = ‘term2’)

支持WHERE运算符

= 等于 fielda = 10 fielda:10
<> 不相等 fielda <> 10 -fielda:10
!= 不相等 fielda != 10 -fielda:10

比...更棒  fielda > 10    fielda:{10 TO *]

= 大于或等于 fielda >= 10 fielda:[10 TO *]
< 少于 fielda < 10 fielda:[* TO 10}
<= 小于或等于 fielda <= 10 fielda:[* TO 10]

4)BETWEEN可以通过范围查询支持,例如field = [50 TO 100]

5)简单的LIKE可以与通配符一起使用,例如field = ‘sam*’

6)ORDER BY

7)SELECT DISTINCT查询

SELECT distinct fieldA as fa, fieldB as fb FROM tableA ORDER BY fa desc, fb desc

8)统计

SELECT count(*) as count, sum(fieldB) as sum FROM tableA WHERE fieldC = ‘Hello’

9)HAVING

SELECT fieldA, fieldB, count(*), sum(fieldC), avg(fieldY)
FROM tableA
WHERE fieldC = ‘term1 term2’
GROUP BY fieldA, fieldB
HAVING ((sum(fieldC) > 1000) AND (avg(fieldY) <= 10))
ORDER BY sum(fieldC) asc
LIMIT 100

你可能感兴趣的:(solr)