首页 开发编程 正文

php怎么查找结果 phpcms搜索结果如何显示自定义的字段

Lucene要优于Sphinx.其中Sphinx支持实时搜索,//xapian.org/4.NutchNutch是一个用java实现的开源的web搜索引擎:查询引擎.其中Nutch是基于Lucene的,Lucene为Nutch提供了文本索引和搜索的API.对于应该使用Lucene还是使用Nutch。...

php怎么查找结果,phpcms搜索结果如何显示自定义的字段?

在你设置自定义字段的时候,如果细心会发现有两项叫做"作为搜索条件"和“作为全站搜索信息”,将它们选为“是”。

全文搜索引擎有那些?

全文搜索引擎有:

1. Lucene

Lucene的开发语言是java,也是Java家族中最为出名的一个开源搜索引擎,在Java世界中已经是标准的全文检索程序,它提供了完整的查询引擎和索引引擎,没有中文分词引擎,需要自己去实现,因此用Lucene去做一个搜素引擎需要自己去架构.另外它不支持实时搜索,但linkedin和twitter有分别对Lucene改进的实时搜素. 其中Lucene有一个C++移植版本叫CLucene,CLucene因为使用C++编写,所以理论上要比lucene快.

官方主页:http://lucene.apache.org/

CLucene官方主页:http://sourceforge.net/projects/clucene/

2. Sphinx

Sphinx是一个用C++语言写的开源搜索引擎,也是现在比较主流的搜索引擎之一,在建立索引的事件方面比Lucene快50%,但是索引文件比Lucene要大一倍,因此Sphinx在索引的建立方面是空间换取事件的策略,在检索速度上,和lucene相差不大,但检索精准度方面Lucene要优于Sphinx,另外在加入中文分词引擎难度方面,Lucene要优于Sphinx.其中Sphinx支持实时搜索,使用起来比较简单方便.

官方主页:http://sphinxsearch.com/about/sphinx/

3. Xapian

Xapian是一个用C++编写的全文检索程序,它的api和检索原理和lucene在很多方面都很相似,算是填补了lucene在C++中的一个空缺.

官方主页:http://xapian.org/

4. Nutch

Nutch是一个用java实现的开源的web搜索引擎,包括爬虫crawler,索引引擎,查询引擎. 其中Nutch是基于Lucene的,Lucene为Nutch提供了文本索引和搜索的API.

对于应该使用Lucene还是使用Nutch,应该是如果你不需要抓取数据的话,应该使用Lucene,最常见的应用是:你有数据源,需要为这些数据提供一个搜索页面,在这种情况下,最好的方式是直接从数据库中取出数据,并用Lucene API建立索引.

官方主页:http://nutch.apache.org/

5. DataparkSearch

DataparkSearch是一个用C语言实现的开源的搜索引擎. 其中网页排序是采用神经网络模型. 其中支持HTTP,HTTPS,FTP,NNTP等下载网页.包括索引引擎,检索引擎和中文分词引擎(这个也是唯一的一个开源的搜索引擎里有中文分词引擎).能个性化定制搜索结果,拥有完整的日志记录.

官方主页:http://www.dataparksearch.org/

6. Zettair

Zettair是根据Justin Zobel的研究成果为基础的全文检索实验系统.它是用C语言实现的. 其中Justin Zobel在全文检索领域很有名气,是业界第一个系统提出倒排序索引差分压缩算法的人,倒排列表的压缩大大提高了检索和加载的性能,同时空间膨胀率也缩小到相当优秀的水平. 由于Zettair是源于学术界,代码是由RMIT University的搜索引擎组织写的,因此它的代码简洁精炼,算法高效,是学习倒排索引经典算法的非常好的实例. 其中支持linux,windows,mac os等系统.

官方主页:http://www.seg.rmit.edu.au/zettair/about.html

7. Indri

Indri是一个用C语言和C++语言写的全文检索引擎系统,是由University of Massachusetts和Carnegie Mellon University合作推出的一个开源项目. 特点是跨平台,API接口支持Java,PHP,C++.

官方主页:http://www.lemurproject.org/indri/

8. Terrier

Terrier是由School of Computing Science,Universityof Glasgow用java开发的一个全文检索系统.

官方主页:http://terrier.org/

9. Galago

Galago是一个用java语言写的关于文本搜索的工具集. 其中包括索引引擎和查询引擎,还包括一个叫TupleFlow的分布式计算框架(和google的MapReduce很像).这个检索系统支持很多Indri查询语言.

官方主页:http://www.galagosearch.org/

10. Zebra

Zebra是一个用C语言实现的检索程序,特点是对大数据的支持,支持EMAIL,XML,MARC等格式的数据.

官方主页:https://www.indexdata.com/zebra

11. Solr

Solr是一个用java开发的独立的企业级搜索应用服务器,它提供了类似于Web-service的API接口,它是基于Lucene的全文检索服务器,也算是Lucene的一个变种,很多一线互联网公司都在使用Solr,也算是一种成熟的解决方案.

官方主页:http://lucene.apache.org/solr/

12. Elasticsearch

Elasticsearch是一个采用java语言开发的,基于Lucene构造的开源,分布式的搜索引擎. 设计用于云计算中,能够达到实时搜索,稳定可靠. Elasticsearch的数据模型是JSON.

官方主页:http://www.elasticsearch.org/

13. Whoosh

Whoosh是一个用纯python写的开源搜索引擎.

官方主页:https://bitbucket.org/mchaput/whoosh/wiki/Home

phpcms怎么设置搜索文章作者?

因为phpcms中文章模型并没有文章作者这个字段(有来源)。

所以可以通过添加一个“文章作者”字段并设置可以搜索来实现。不知道这样可不可以满足你的需求。

PHP多维数组根据值搜索对应的键?

引言

我们讲解了很多种PHP数组操作的引用场景。今天我们接着分享这方面的知识,说一说对于多维数组,如何根据值搜索,并返回数组的索引值。

学习时间

最开始我们习惯于跟随本能写代码,下意识地开始用 for 循环,对数组进行遍历,然后挨个比对,如果值相等,就返回索引值,如果没有匹配上,就是不存在。

假如原始数组是如下图一样的关联数组。

程序逻辑很简单,我们使用代码实现一下:

function searchForId($id, $array) { foreach ($array as $key => $val) { if ($val['uid'] === $id) { return $key; } } return null; }

这个函数接收一个值,与数组,如果匹配上就将数组的索引返回,如果不存在则返回 null。因为第一层结构没有手动指定索引值,所以默认是从0开始的数字索引。

使用起来是这样的:

$id = searchForId('100', $userdb);

执行结束后,输出应该为0。

当然了,上面写的函数具有通用性,对于特殊的案例,我们应该随机应变。对于上述 $userdb 关联数组的结构,显然,使用PHP内置的函数操作起来,更为直观和快捷。

我们只需要先把 uid 列的元素全部取出,因为上层结构是默认数字索引,所以此处不用手动指定索引值;然后,在提取的数组中搜索值,使用 array_search 执行返回键。

总结为代码,就一行:

$key = array_search('100', array_column($userdb, 'uid'));

执行结果跟上面的 searchForId 函数一致。

深入讨论

上面的函数和第二个解决方法会有问题,就是仅仅返回了第一个匹配的键。像下面这样写,肯定问题不大:

$key = array_search(40489, array_column($userdb, 'uid'));

但是如果在数组中有重复的值,而 uid 列也不唯一,要把所有的匹配结果都返回,该怎么做呢?不会又要修改 searchForId 函数,重新倒腾?

其实大可不必,PHP提供了这样的功能,只需改用 array_keys 函数即可:

$keys = array_keys(array_column($userdb, 'uid'), 40489);

你肯定经常使用 array_keys 函数用于返回整个数组的键,但是它的第二个参数,恰恰是在指定时,拥有可搜索的功能。这确实有些冷门。

再进一步。

上面返回的是数组对应的键,那如果想要键和值一并关联返回,一行代码能搞定吗?可以的,修改一下就行了,使用 array_combine 函数将键和值组装起来返回:

$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);

写在最后

本文通过特定的数组搜索需求,延伸到手动造轮子,把特殊的特性推向一般,并使用PHP内置的数组处理函数,进行功能裁切,简洁而高效。善用数组函数是硬功夫。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

php如何与oracle连接?

PHP其实本身是自带Oracle的扩展的,只不过开启之后基本上没有任何作用,需要自己去下载新版本的扩展,需要根据Oracle数据库版本去下载扩展,而且还需要下载对应php版本的oracle instant client 来支持扩展的运行,不然只是开启扩展,扩展也是开启不成功的,如果电脑上安装了Oracle数据的话,就不用下载oracle instant client ,这里我本地没有Oracle的客户端所以需要下载oracle instant client。

下载完成之后,解压到同一个文件夹目录下, 在这里,我们放在E:\Oracle下,解压到当前文件夹,最后会自动生成一个新的文件夹instantclient_11_2,两个安装包的文件都会放到该文件夹下,即 E:\Oracle\instantclient_11_2。

二、 修改系统变量

1> 将E:\Oracle\instantclient_11_2添加到系统变量PATH中

2> 新增系统变量

NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252 -->> 服务器端字符集

TNS_ADMIN=E:\Oracle\instantclient_11_2 -->> 指定tnsnames.ora所在位置

注意:如果安装网上方法系统变量依然没有生效的话,需重启电脑让修改的系统变量生效。

三、 在E:\Oracle\instantclient_11_2 下新建tnsnames.ora配置文件,内容如下:

到这里支持的扩展工具就安装好了,接下来就去下载oci8的php扩展包。

需要根据php版本下载对应版本的扩展,解压后将解压出来的.dll文件放到对应php的ext中,最后在php.ini中增加开启对应的扩展

extension=php_oci8.dll

extension=php_oci8_11g.dll

执行完成之后可以在phpinfo中查看到对应的功能已经开启。

如果你的phpinfo里面显示出来了这些就说明PHP已经可以连接并操作Oracle数据库了。

本文转载自互联网,如有侵权,联系删除