首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Sphinx + Coreseek 实现中文分词搜索

为中文优化过的结果集排序算法。中文用户有使用长短语(短句)进行搜索的习惯,而汉化的全文搜索不考虑词与词之间的位置关系,严重影响了用户的使用体验; 能够利用中文的词性信息。对于不同词性的词。...闪电般的检索速度:虽然是1千万条的大数据量,查询数据的速度也在毫秒级以上。2-4G的文本量中平均查询速度不到0.1秒。 为非常多脚本语言设计了检索API。...SetServer ( '127.0.0.1', 9312); //下面设置用于返回数组形式的结果 $cl->SetArrayResult ( true ); /* //ID的过滤 $cl->SetIDRange...(3,4); //sql_attr_uint等类型的属性字段,须要使用setFilter过滤,相似SQL的WHERE group_id=2 $cl->setFilter('group_id',array...(2)); //sql_attr_uint等类型的属性字段,也能够设置过滤范围,相似SQL的WHERE group_id2>=6 AND group_id2<=8 $cl->SetFilterRange

1.5K20

【总结】两个月的工作任务总结

SPH_MATCH_ANY 匹配查询词中的任意一个. SPH_MATCH_PHRASE 将整个查询看作一个词组,要求按顺序完整匹配. SPH_MATCH_BOOLEAN 将查询看作一个布尔表达式....SPH_MATCH_EXTENDED 将查询看作一个 Sphinx 内部查询语言的表达式. SPH_MATCH_FULLSCAN 使用完全扫描,忽略查询词汇....检索时设置条件过滤 $sphinx->SetFilter($filterkey, $filtervalue); 2.完成时长: 两天 3.难点介绍 对检索的结果设置检索条件[根据 status 查询...status查询的结果不正确) - 对SphinxClient的方法和属性不熟 =》 sphinx设置过滤的使用方法: $sphinx->SetFilter($filterkey, $filtervalue...对功能相同或相似的代码可以理解后直接使用,以效率为主 (3) 走心的记住之前理出来的逻辑(快速的重要前提) 不要总是分神,养成专注和集中注意力的能力(保持思考) 不要情绪化,影响思考能力和专注度 注意休息

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    用sphinx给PHP加个给力的搜索功能

    生成关键字表,使用关键字表进行查询 对数据内容的标题和内容进行分词,把各个分词结果关联该内容。查询的时候根据查询关键字进行匹配。因为不是模糊搜索,所以可以使用数据库的索引,加快搜索速度。...所以这种生成关键字的方式,虽然查询速度上会比直接使用like查询快,但是业务逻辑会比较复杂。需要在数据插入,更新的同时更新关键词数据。同时查询之前也要对查询内容进行分词操作。...查询的准确度依赖于分词结果。 使用sphinx作为搜索引擎 sphinx支持全文搜索,所以在sphinx中查询到关键字对应内容id之后再通过数据库获取内容的全部数据。...2、需要定期重全量索引,保证增量索引重建速度。增量索引的重建速度影响查询的准确率,避免查询已经变更的历史数据。 3、索引重建可以不关闭服务器,但是会影响内存和磁盘开销。...在业务高峰期重建索引容易引起意外 本地实验查询所使用的字是通过sphinx索引创建的字典生成。

    1K40

    使用PHP+Sphinx建立高效的站内搜索引擎

    为什么要使用Sphinx 假设你现在运营着一个论坛,论坛数据已经超过100W,很多用户都反映论坛搜索的速度非常慢,那么这时你就可以考虑使用Sphinx了(当然其他的全文检索程序或方法也行)。...Sphinx的特性 l  高速索引 (在新款CPU上,近10 MB/秒); l  高速搜索 (2-4G的文本量中平均查询速度不到0.1秒); l  高可用性 (单CPU上最大可支持100 GB的文本,100M...这里解释下为什么我们下载的程序叫Coreseek,Coreseek是基于Sphinx开发的一款软件,对Sphinx做了一些改动,在中文方面支持得比Sphinx好,所以我们使用之。...使用Sphinx 我要使用Sphinx需要做以下几件事 1)        首先得有数据 2)        建立Sphinx配置文件 3)        生成索引 4)        启动Sphinx...sql_query 建立索引时的查询命令,在这里尽可能不使用where或group by,将where与groupby的内容交给sphinx,由sphinx进行条件过滤与groupby效率会更高,注意

    2.3K10

    HBase的JavaAPI使用--进阶篇--过滤器的使用

    本篇博客,小菌为大家带来HBase的进阶使用,关于基础入门操作大家可以去阅览小菌之前的博客《HBase的JavaAPI使用–基础篇》。...FamilyFilter 查询比f2列族小的所有的列族内的数据 /** * 列族过滤器 FamilyFilter * [查询比f2列族小的所有的列族内的数据] * @throws...3.rowkey前缀过滤器PrefixFilter 查询以00开头的所有前缀的rowkey /** * rowkey前缀过滤器PrefixFilter * [查询以00开头的所有前缀的...FilterList 需求:使用SingleColumnValueFilter查询f1列族,name为刘备的数据,并且同时满足rowkey的前缀以00开头的数据(PrefixFilter) /**...* 多过滤器综合查询FilterList * 需求:使用SingleColumnValueFilter查询f1列族,name为刘备的数据,并且同时满足rowkey的前缀以00开头的数据(PrefixFilter

    1.6K40

    数据库优化之(创建索引、分表、读写分离、缓存)

    where match(title,body) against(‘database’); 【会使用全文索引】 索引使用小技巧 创建索引的好处 –帮助用户提高查询速度 –利用索引的唯一性来控制记录的唯一性...具体技巧: 对于创建的多列索引(复合索引),不是使用的第一部分就不会使用索引。...的查询,查询如果是’%aaa’不会使用到索引,而’aaa%'会使用到索引。...所以在like查询时,‘关键字’的最前面不能使用 % 或者 _这样的字符.,如果一定要前面有变化的值,则考虑使用 全文索引->sphinx....2.按区间范围分表 一般在有严格的自增id需求上,如按照user_id水平分表: table_1 user_id 从1~100w table_2 user_id 从101~200w table

    1.5K10

    sphinx 配置 及 小内存解决办法

    ## 有的字符串,虽然长度很长,但是实际上并没有使用那么长的字符,所以在Sphinx并不会收录所有的字符,而是给每个属性一个缓存作为长度限制。...## 我们进行索引一般只会返回主键id,而不会返回表中的所有字段。 ## 但是在调试的时候,我们一般需要返回表中的字段,那这个时候,就需要使用sql_query_info。...:让索引重建的时候不要影响数据库的性能表现。...## 首先文档id是存储在一个文件中的(spa) ## 当使用inline的时候,文档的属性和文件的id都是存放在spa中的,所以进行查询过滤的时候,不需要进行额外操作。...## extern就意味着每次做查询过滤的时候,除了查找文档id之外,还需要去内存中根据属性进行过滤。 ## 但是即使这样,extern由于文件大小小,效率也不低。

    1K10

    windows7使用Sphinx+PHP+MySQL详细介绍

    摘要 由于业务需要,需要做类似淘宝商城商品检索的功能,对于数据量很大的情况,MySQL 查询的效率损耗很大,需要使用专门的索引引擎进行搜索查询,实现功能,对于和 PHP 和 Mysql 的结合的索引引擎中..., xunsearch 和 sphinx 是较为著名的,但由于 xunsearch 服务器端不支持 windows,所以暂且先考虑 sphinx 的使用。..., group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \ FROM documents # 设置查询过滤条件...默认 sphinx 返回的数据中包含 id 信息是和数据记录的信息是相关的,所以我们需要通过 id 到数据库中查询相关信息。...; $sphinx->setServer("localhost", 9312); // 进行过滤查询 if (!

    2.2K10

    【迅搜19】扩展(二)TNTSearch和JiebaPHP方案

    也就说,它们在底层可能连文档信息都不会存,只是存词项与文档 ID 之间的关系以及这些词项与文档的评分情况。 TNTSearch 也是实现的 BM25 评分算法。...可以看到返回结果的顺序不是按 ID 排序的,现在 docScores 也有各文档的关键词评分结果。 这种搜索引擎的使用方式,就是通过检索返回的主键 ID ,再去数据库进行主键查询获取完整的数据。...用过 Sphinx 的小伙伴对这种查询方式一定不会陌生,而如果你之前没用过 Sphinx 也没关系,试试 TNTSearch ,如果未来有可能用到 Sphinx 了,也会马上就能上手了。...就是我们在上面进行检索查询时测试的那个关键词。 对应的词项表id是 456 。接下来,到 doclist 文档表中查找词项id(term_id)为 456 的数据。...然后在 doclist 中,又对 term_id 建立了索引。因此,在直接的检索过程中,这两块都是走了数据库索引的,速度是完全有保障的。

    31610

    搜索引擎配置优化笔记 - 老板的讲课

    搜索引擎优化 并不是 只seo 而是只自建搜索引擎的配置优化 使用了两个开源的软件:sphinx 和 redis 开源搜索引擎 1.Lucence/Nutch/Solr Java编写 2.Sphinx/...4.2-3不断重复 Sphinx 特点 索引快,支持中文,丰富的查询表达式,可以分段落,支持模糊查询,多种结果后处理机制 排序,BM25,搜索算法 支持实时索引,地理位置搜索 Redis 介绍 Nosql...数据库, 数据常驻内存, 实时异步存储到数据库 Redis 特点 数据不会丢失,查询速度快 流程 论坛 -> 索引服务器 -> 处理文档 去特殊字符-> 存储到Redis ,获得ID -> 索引服务器...Sphinx 中文分词 Sphinx 汉字自动单词分词 一元分词法 查询时用“”取消分词,对汉字进行词语分组 最多分词法,一元分词法(最灵活) 中文分词法 httpcus 张宴 分词中学习,检查某几个字合在一起得到的结果多少...同义词表 自动纠错 自动完成功能 SCWS 分词 php中文分词 搜索的时候找稀少词,分词后,搜索结果越少的词越是用户需要的

    48620

    shpinx的安装与使用测试

    Sphinx支持高速建立索引(可达10MB/秒,而Lucene建立索引的速度是1.8MB/秒) 高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果) 高扩展性(实测最高可对100GB的文本建立索引...操作,用于保存一些状态数据等 sql_query_killlist:屏蔽索引id数据源,用来告诉sphinx,哪些索引id要屏蔽,配合kbatch使用 index 配置说明: 说明 source:使用数据配置名...ngram_len:对于非字母型数据的长度切割(默认已字符和数字切割,设置1为按没个字母切割) ngram_chars:ngram 字符集,中文需要配置 kbatch:屏蔽索引的列表 使用 先来看如何把...如果数据修改,或删除,则配合sql_query_killlist可以屏蔽旧的索引数据,从而保证对修改的数据以增量索引为主。以下是sphinx使用的一个说明图: ?...如果没有配置sql_query_killlist的时候,对于已经修改的数据,sphinx返回的查询还是旧的数据。

    83930

    Elasticsearch学习笔记

    标准切分,去掉大部分符号,最后转为小写 空格分析器:按空格切分,不转换为小写 语言分析器:根据特定语言的特性做分析 查询方式 字段查询:精确匹配,查询前不会将被查询的字符串分析 全文查询:查询前会先用分析器分析要查询的字符串...must_not:not shoud:or 过滤顺序 过滤顺序对性能有很大影响 更详细的过滤条件应该放在最前,以便排除更多的文档 被缓存的过滤应该放到不会缓存的过滤前面(缓存参考后面章节) 2....不可被缓存的情况 脚本过滤器,脚本对es是不透明的 Geo(地址)过滤器,不太会被重用 日期范围精确到毫秒不会被缓存,整数会被缓存 过滤时间范围的使用建议 对于时间精确到毫秒的查询,可拆分为日期+日期时间两个过滤条件...适合父文档少,子文档多的情况 优势 更新父文档时,不用更新子文档索引 创建删除修改子文档时,不影响父文档和其他文档 劣势 查询速度比嵌套类型慢5-10倍 不适合父文档多的情况 设计父子关系 指定某一文档...改到30s,做大批量倒入时,把这个值设为-1,倒入完毕后重新设置回来 大批量倒入时,index.number_of_replicas设为0,关闭副本,提高效率 尽量使用es自动生成的id,避免版本查找影响效率

    1.9K52

    mysql学习总结08 — 优化(设计层)-索引与分区分表

    频繁作为查询条件的字段应该创建索引,如学生学号 唯一性不强的字段不适合单独创建索引,即使频繁作为查询条件,如性别 更新频繁的字段不适合创建索引,如登录次数 不会出现在where子句中的字段不应该创建索引...1.8 索引覆盖 如果查询的列恰好是索引的一部分,那么查询只需在索引区进行,不需要到数据区再找数据,速度非常快。负面影响是增加了索引尺寸。...(4) 复合索引 对于创建的多列(复合)索引,只要查询条件使用了最左边的列,索引一般就会被使用。...一般当取出的数据量超过表中数据的20%,优化器就不会使用索引,直接全表扫描。...id % 4; ... 3.2 垂直分表 一个数据表中的不常用字段也会占据一定资源,对整体性能产生影响,可以将不常用的字段存储到另外的辅表中,通过主键关联。

    60540

    HBase的java代码开发

    熟练掌握通过使用java代码实现HBase数据库当中的数据增删改查的操作,特别是各种查询,熟练运用 第一步:创建maven工程,导入jar包 过滤器的类型很多,但是可以分为两大类——比较过滤器,专用过滤器 过滤器的作用是在服务端判断数据是否满足条件,然后只将满足条件的数据返回给客户端; hbase过滤器的比较运算符: [表格] Hbase过滤器的比较器...ValueFilte 查询所有列当中包含8的数据 /** * hbase值过滤器 * 查询包含8的列值 */ @Test public void...SingleColumnValueExcludeFilte 与SingleColumnValueFilter相反,会排除掉指定的列,其他的列全部返回 3、rowkey前缀过滤器PrefixFilte 查询以...FilterList 需求:使用SingleColumnValueFilter查询f1列族,name为刘备的数据,并且同时满足rowkey的前缀以00开头的数据(PrefixFilter) /*

    1.9K00

    mysql学习总结08 — 优化(设计层)-索引与分区分表

    频繁作为查询条件的字段应该创建索引,如学生学号 唯一性不强的字段不适合单独创建索引,即使频繁作为查询条件,如性别 更新频繁的字段不适合创建索引,如登录次数 不会出现在where子句中的字段不应该创建索引...1.8 索引覆盖 如果查询的列恰好是索引的一部分,那么查询只需在索引区进行,不需要到数据区再找数据,速度非常快。负面影响是增加了索引尺寸。...(4) 复合索引 对于创建的多列(复合)索引,只要查询条件使用了最左边的列,索引一般就会被使用。...一般当取出的数据量超过表中数据的20%,优化器就不会使用索引,直接全表扫描。...id % 4; ... 3.2 垂直分表 一个数据表中的不常用字段也会占据一定资源,对整体性能产生影响,可以将不常用的字段存储到另外的辅表中,通过主键关联。

    2K400

    HBase的java代码开发(详细代码)

    过滤器的类型很多,但是可以分为两大类——比较过滤器,专用过滤器 过滤器的作用是在服务端判断数据是否满足条件,然后只将满足条件的数据返回给客户端; hbase过滤器的比较运算符: ?...FamilyFilter 查询比f2列族小的所有的列族内的数据 /** * hbase列族过滤器FamilyFilter */ @Test public void familyFilter() throws...ValueFilter 查询所有列当中包含8的数据 /** * hbase值过滤器 * 查询包含8的列值 */ @Test public void valueFilter() throws IOException...查询以00开头的所有前缀的rowkey /** * 行键前缀过滤器 */ @Test public void preFilter() throws IOException { //获取连接...FilterList 需求:使用SingleColumnValueFilter查询f1列族,name为刘备的数据,并且同时满足rowkey的前缀以00开头的数据(PrefixFilter) /** *

    1.9K20

    php_sphinx安装使用

    Sphinx的简介: Sphinx是一个独立的全文索引引擎,意图为其他应用提供高速、低空间 占用、搜索结果高相关度的全文搜索功能。Sphinx可以非常容易的与 SQL数据库和脚本语言集成。...Sphinx的使用背景:在mysql中优化的时候,对varchar,char,text对这些数据进行查询时,如果我们使用like ‘%单词’,是无法使用到索引,如果网站的数据量比较大,会拖垮网站的速度。...Sphinx的原理: 先对数据源建立索引。采用分词技术,形成一个索引表。当查询某个单词的时候,先到sphinx建立的索引去查找,然后再去数据库用id查找。...indexer.exe –c配置文件 –all | 索引的名字 Indexer.exe -c sphinx.conf 索引的名字(sphinx.conf里面配置的) 安装启动sphinx: 语法: searchd.exe...(‘localhost’,9312); // 设置服务器 $res = $sc->query(‘武侠’,’ mysql’); // 第一个参数是查询内容,第二个参数是索引的名称(sphinx.conf里面配置

    63220

    MySQL性能优化(三)-- 索引

    如果查询id为9,name为ii的,在表中需要查询9次,但是在二叉树中需要查询3次。...1-4.全文索引:fulltext 数据库自带的全文索引,对中文支持不友好,可以借助第三方的框架,如:sphinx(斯芬克斯)、coreseek 2.多列索引(组合索引,一个组合索引包含两个或两个以上的列...在使用查询的时候遵循mysql组合索引的“最左前缀”,where时的条件要按建立索引的时候字段的排序方式,下面都是基于多列索引讲述的: 1、不按索引最左列开始查询 (1) where address='...2、查询中某个列有范围查询,则其右边的所有列都无法使用查询(多列查询) where name='xbq' and address like '%深%' and remark='程序员' ,该查询只会使用索引中的前两列...3、查询中第一个索引字段出现like '%xxx%'或者'%xxx',不会走索引 ? 4.查询中多条件用or连接,此类型和1相似 ? 那么对于索引怎么删除呢?

    54110

    Elasticsearch控制相关度

    查询时的权重提升 是可以用来影响相关度的主要工具,任意类型的查询都能接受 boost 参数。...} } } 备注:max_boost 只对函数的结果进行限制,不会对最终评分 _score 产生直接影响。 衰减函数 它们可以操作数值、时间以及经纬度地理坐标点这样的字段。...函数:保持着一个将要被使用的函数列表,可以为列表里的每个函数指定一个filter过滤器,此时,函数只会被应用到那些与过滤器匹配的文档。...到目前为止,我们展现的都是为所有文档应用单个函数的使用方式,现在会用过滤器将结果划分为多个子集(每个特性一个过滤器),并为每个子集使用不同的函数。..."seed": "the users session id" #将用户的会话 ID 作为种子 seed ,让该用户的随机始终保持一致,相同的种子 seed 会产生相同的随机结果。

    2.2K11
    领券