一直在使用sphinx做站内搜索,索引的模式是主索引 + 增量索引,做到准实时索引。使用增量索引的方式是新建一张辅助表。刚开始的设计是按照coreseek网站推荐的取最大的id进行更新增量索引。由于前期的需求不多,一直没发现有什么问题。在提出新的需求按时间排序时,问题就出现了,取最大的id进行增量索引的话,也只是索引数据表中增加的数据,不会索引已经更新的数据。
自然而然就想到了另外一种实现方式,即以最后的更新时间作为分界点,每次建增量索引时都判断更新时间是否大于上次建主索引时的最大更新时间。这种方式的好处就是,只要你数据有更新,就能实时的进行索引。
然而,这种方式上去后又出现了一个问题,多索引的排序问题。对于更新的数据,他们存在于主索引和增量索引中,搜索时的排序就会出现混乱。这就需要屏蔽主索引的相关数据。
解决方案是新增标志位与UpdateAttributes结合。
比如:主索引——>select id ,name,context, 1 as isdirty from table1;
增量索引——>select id,name,context,1 as isdirty from table1 where modifyTime > lastMaxModify;
Isdirty就是标志位,1代表未更新,2代表更新。
接下去就是利用UpdateAttributes把主索引的更新数据的isdirty更新为2。
如何找到主索引中已更新的数据呢?
找出在增量索引中的更新数据。简单的几句java代码:
Client.setFilterRange(“createTime”,0, maxModify.getTime()/1000);//创建时间在更新时间之前的;
SphinxResult res = Client.query(“”,”delta”);
attrs[0]=“isdirty”;values = new long[res.matches.length][ res.matches.length]
Client.updateAttribute(“main”,attrs,values);
得出它的所有docid,当做参数传给updateAttributes();
updateAttributes更新的数据时存放在内存中,索引如果用命令行search是搜索不到的,不过在程序中可以生效。
更新属性完成后,就只要在搜索时setFilter(“isdirty”,2,false);
分享到:
相关推荐
例如,你可以定义一个索引名为`test_index`,指定数据源(如MySQL),设置索引字段、分词器、排序规则等。 4. **Sphinx快速使用** 根据`1.sphinx快速使用.doc`,快速启动Sphinx包括以下步骤: - 安装Sphinx软件。...
这个模式允许使用类似SQL的语法进行复杂排序,可以指定多个列(不超过5个,包括内部和用户定义的属性)的组合排序。例如,`@relevance DESC, price ASC, @id DESC`将首先按相关度降序,其次按价格升序,最后按文档...
当数据发生变化时,例如新增、修改或删除记录,这些变化会被同步到Sphinx索引中。 Sphinx是一个高性能的全文搜索引擎,它可以提供比MySQL原生全文搜索更快、更准确的结果。它支持分布式索引、近实时索引更新,以及...
对于多语言支持,Sphinx 还会应用特定语言的规则,比如德语的名词大小写处理或中文的词组切分。 4. **搜索索引**: 当查询语句经过处理后,Sphinx 将在预先建立的索引中进行查找。索引是数据的预处理结果,它将...
Sphinx的核心特性包括:全文索引、布尔操作符、短语匹配、近似搜索、同义词处理、过滤器(如范围查询、多值字段)等。 2. **Java整合Sphinx**: 在Java应用中使用Sphinx,首先需要引入Sphinx的Java客户端库,例如`...
你可以定义多个索引来处理不同数据源,每个索引包含对数据表的引用、字段设置、排序规则等。例如,你可以配置一个索引用于文章内容,另一个用于用户资料。 3. **PHP与Sphinx交互**: PHP可以通过Sphinx的PECL扩展`...
1. **高速索引**:Sphinx能够快速地处理大量数据进行实时索引。 2. **高效率查询**:查询响应时间通常在毫秒级别,提高了用户体验。 3. **灵活的查询语法**:支持布尔、短语、前缀、范围、邻近等多种查询类型。 4. *...
5. **扩展性**:Sphinx 具有良好的扩展性,可以通过设置多个索引,分别对应不同类型的论坛数据,如主题、帖子、用户资料等。 6. **多语言支持**:除了中文,Sphinx 还支持其他多种语言的全文检索,满足国际化社区的...
6. **排序和过滤**: Sphinx允许根据多个字段进行排序,并可以设置过滤条件,例如限制搜索结果的日期范围、价格区间等,帮助用户更精确地找到所需信息。 7. **分布式搜索**: 对于大规模的数据,Sphinx支持分布式搜索...
建立索引是Sphinx搜索服务的核心部分,涉及到定义数据源、属性、多值属性(MVA)、索引设置、数据源限制和字符集处理。Sphinx支持多种数据源,如SQL、xmlpipe、Python等,每种数据源都有其特定的索引方式和配置选项...
1. **实时索引**:Sphinx 支持实时索引,这意味着它可以快速地添加、删除或更新索引中的文档,无需重新构建整个索引。 2. **高效搜索**:Sphinx 使用倒排索引技术,能够快速地进行全文搜索,提供毫秒级的搜索响应...
- `conf`目录:包含Sphinx的配置文件,如`sphinx.conf`,用于设置索引的详细配置,如数据源、索引结构、排序规则等。 - `src`目录:包含了Sphinx的源代码,用户可以在此基础上进行二次开发或自定义扩展。 - `bin`...
Sphinx索引创建过程的核心在于索引结构的设计。索引结构决定了搜索的效率以及索引数据的存储方式。Sphinx提供了不同的索引类型,如实时索引(rt)和分布式索引(分布式搜索)。实时索引能够实时更新文档的变化,适合...
7. **排序和过滤**:Sphinx允许根据多个字段进行排序,并可以设置过滤条件,比如按时间、评分等进行排序,或只显示满足特定条件的文档。 8. **词性标注和同义词处理**:Sphinx可以处理词性标注,提高搜索的准确性。...
Sphinx 的优势在于其强大的索引能力,支持实时增量索引,同时提供布尔、短语、模糊和近似搜索等多种查询类型。它还支持权重计算,可以实现基于内容的相关性排序。 ### 3. Sphinx 构建 Web 站内搜索引擎 使用 ...
当存在多个索引文件时,Sphinx可以自动将它们合并为一个索引,提高搜索效率。 #### 四、搜索 **4.1 匹配模式** Sphinx支持多种匹配模式,如`extended`、`phrase`等,每种模式适用于不同的搜索场景。 **4.2 布尔...
8. **分布式搜索**:Sphinx 支持分布式搜索,可以将索引分散在多台服务器上,以处理更大规模的数据量和更高的并发请求。 **与 MySQL 的集成:** Sphinx 可以与 MySQL 数据库紧密集成,实现数据的实时同步。主要...
8. **分布式搜索**: 如果Sphinx部署在多台服务器上,JAVAAPI能处理分布式搜索,将查询分散到各个节点并合并结果。 **应用场景** 1. **内容搜索**: 在内容管理系统、博客平台、电子商务网站等中,Sphinx JAVAAPI...