一直在使用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可以处理词性标注,提高搜索的准确性。...
索引过程中还涉及到属性的配置,包括多值属性(MVA)的处理。在建立索引时还需要考虑字符集、大小写转换、以及转换表的影响。 在搜索方面,Sphinx提供了多种匹配模式,包括但不限于布尔查询语法和扩展查询语法。...
8. **分布式搜索**:Sphinx 支持分布式搜索,可以将索引分散在多台服务器上,以处理更大规模的数据量和更高的并发请求。 **与 MySQL 的集成:** Sphinx 可以与 MySQL 数据库紧密集成,实现数据的实时同步。主要...
- 搜索性能可以通过调整索引字段类型、排序规则、缓存策略等方式进行优化。同时,定期更新索引以保持数据的新鲜度。 10. **高级特性**: - Sphinx 还提供了实时索引、分布式搜索、拼写检查、相关性计算等功能,...