正向索引与反向索引(solr)

正向索引与反向索引(solr),第1张

正向索引(正排索引) :正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。

正排表结构如图1所示,这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护;因为索引是基于文档建立的,若是有新的文档加入,直接为该文档建立一个新的索引块,挂接在原来索引文件的后面。若是有文档删除,则直接找到该文档号文档对应的索引信息,将其直接删除。但是在查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。

尽管 正排表的工作原理非常的简单 ,但是由于其检索效率太低,除非在特定情况下,否则实用性价值不大。

反向索引(倒排索引) :倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。

由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率。 倒排表的结构图如图2:

一条索引包含了

Tips

solrJ 创建core只是把自己的文件夹加入到solr中,各种文件还要自建立

<field name="5#城市" type="string" indexed="false" stored="true"/>

pf 查询字段 qf 设置字段性对查询字段的比重 bf 设置权重的值

Searchers are presented with the indexed terms, along with numerical counts of how many matching documents were found were each term Faceting makes it easy for users to explore search results, narrowing in on exactly the results they are looking for

简单说,solr的facet特性会搜索特定的facetitem,返回query中查询字段在item字段上的统计值且仅仅返回统计数量
facetpoivt 实现了多维统计例如统计班级学生的成绩分布,可以设置poivt=class,poivt=socore 返回的结果就是每个班各个成绩段学生的数量
在SolrJ中使用facet功能需要手动开启: querysetFacet(true) 然后根据需要 queryset(,) 添加条件

facet 简单使用

你是solr 4以后的版本吧,使用了version的概念 文档数会不停的增加、或不变 只有达到某个合并的零界点的话,才会使文档数的跟你数据一致 删除:文档数不变化 更新/新增:文档数增大

SolrQuery solrQuery = new SolrQuery(); Map map = new HashMap(); mapput(FacetParamsFACET_DATE, "manufacturedate_dt"); mapput(FacetParamsFACET_DATE_START,"2004-01-01T00:00:00Z"); mapput(FacetParamsFACET_DATE_END,"2010-01-01

1、将解压包中的solr-471/dist/solr-471war复制到tomcat_dir/webapps/目录,并命名为solrwar。
2、将solr-471/example/lib/ext/目录下的jar文件复制到tomcat/lib目录下,将solr-471/example/resources/下的log4jproperties文件复制到tomcat_dir/lib目录下;
切把 solr-471/example/solr,复制到tomcat_dir/bin下。
3、修改tomcat_dir/conf/serverxml
<Connector port="8080" protocol=">

正好在研究Solr

可以直接在Solr中Schema Brower中查看已经建立索引的字段,其实也就是配置的solr的字段映射文件

每次在往Solr中添加、修改数据时,solr都会根据映射配置文件建立索引;所以是先配置schemaxml文件,你修改完后,索引已经建了肯定不会修改,所以需要手动重建索引哦

数据库中的索引分为两种类型,分别是普通索引、唯一索引。下面让我们来分别介绍一下这两种索引。

第一种是普通索引,CREATE INDEX indexName ON mytable(username(length));创建表的时候直接指定。删除索引的语法:DROP INDEX [indexName] ON mytable;

第二种是唯一索引,它与普通索引是类似的,但也存在不同之处,不同之处在于索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

以上三张图分别为创建索引、修改表结构、创建表时直接指定的数据。而且还有四种方式来添加数据表的索引,下面来分别介绍一下。

第一种方式:ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。

第二种方法:ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。

第三种方法:ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。

第四种方法:ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。

END

总结

1

创建索引

修改表结构

创建表时直接指定数据


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13074090.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存