`
youngerblue
  • 浏览: 43433 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

sphinx多索引排序

阅读更多
    一直在使用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);
分享到:
评论

相关推荐

    sphinx分词工具排序

    sphinx全文索引分词工具,可以跟sql一样根据某个字段排序

    使用Sphinx对索引进行搜索

    Sphinx对索引进行搜索主要分为以下几步:1、用户输入查询语句。 2、对查询语句进行词法分析,语法分析,及语言处理。 3、搜索索引,得到符合语法树的文档。 4、根据得到的文档和查询语句的相关性,对结果进行排序。 ...

    sphinx 参考手册和源程序

    3.3. 多值属性 ( MVA : multi-valued attributes) 3.4. 索引 3.5. 数据源的限制 3.6. 字符集 , 大小写转换 , 和转换表 3.7. SQL 数据源 (MySQL, PostgreSQL) 3.8. xmlpipe 数据源 3.9. xmlpipe2 数据源 3.10...

    Sphinx中文参考手册.rar

    3.3. 多值属性 ( MVA : multi-valued attributes) 3.4. 索引 3.5. 数据源的限制 3.6. 字符集 , 大小写转换 , 和转换表 3.7. SQL 数据源 (MySQL, PostgreSQL) 3.8. xmlpipe 数据源 3.9. xmlpipe2 数据源 3.10...

    搜索服务器Techu.zip

    使用 JSON 快速执行全文搜索,支持属性过滤,排序参数和分组检索 可获取文档中高亮的片段,遵循搜索查询语法 缓冲搜索结果到 Redis 组件: 实时索引 Django Framework Nginx web server Redis in-...

    Lucene介绍,全文检索

    Lucene是一个基于Java的全文索引工具包。 基于Java的全文索引引擎Lucene...另外,如果是在选择全文引擎,现在也许是试试Sphinx的时候了:相比Lucene速度更快,有中文分词的支持,而且内置了对简单的分布式检索的支持

    高性能MySQL(第3版).part2

    5.3.7使用索引扫描来做排序175 5.3.8压缩(前缀压缩)索引177 5.3.9冗余和重复索引178 5.3.10未使用的索引181 5.3.11索引和锁181 5.4索引案例学习183 5.4.1支持多种过滤条件183 5.4.2避免多个范围条件185 ...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目

    笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此...

    完全剖析Microsoft SQL Server 7.0

    Sphinx的秘密 . 新的未來 2. SQL Server導覽 [加入我的離線書架] . SQL Server引擎 . DBMS強制的資料完整(Data Integrity) . 交易(Transaction)處理 . 對稱(Symmetric)伺服器架構 . 安全(Security) ...

    java开源包1

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包11

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包2

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包3

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包6

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包5

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包10

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

Global site tag (gtag.js) - Google Analytics