php solr 全文检索引擎,【搜索引擎】Solr Suggester 实现全文检索功能-分词和和自动提示...

功能需求

全文检索搜索引擎都会有这样一个功能:输入一个字符便自动提示出可选的短语:

要实现这种功能,可以利用solr的SuggestComponent,SuggestComponent这种方法利用Lucene的Suggester实现,并支持Lucene中可用的所有查找实现。

实现

1. 配置 managed-schema文件

配置自己core文件夹conf下的managed-schema文件

这个是自己的字段:

新建一个suggest_username字段,并将username的值拷贝到suggest_username字段:

copyField的source表示源,dest表示目标。

新建一个fieldType专门用于搜索建议:

tokenizer就是分词器,官方解释:

就是指将文本流分解为标记tokens,这写tokens也是文本的子序列。

不同的过滤器将输入流替换或者丢弃或者直接通过。

2. 配置solrconfig.xml文件

solrconfig.xml文件也在新建核心core的conf文件夹下

加入searchComponent

AnalyzingSuggester

AnalyzingLookupFactory

DocumentDictionaryFactory

suggest_username

suggest_username

id

text_suggest

false

在searchComponent中的suggester需要配置一些参数。name ;suggest名字

lookupImpl;查找不同算法实现,根据需要选择。

dictionaryImpl;dictionaryImpl。

field;建议的字段,如果是对多个字段做建议,就把多个字段拷贝到一个字段里面。即在定义filed的时候,定义为允许多值。

weightField;表示权重。

payloadField ;用于返回某一个值。

suggestAnalyzerFieldType;field字段的类型。

buildOnStartup;启动的时候构建建议索引。

加入一个requestHandler用于建议:solr.SearchHandler

startup="lazy" >

true

10

suggest

这里 就是上面配置的searchComponent名字suggest。

测试

部分参数说明suggest.build=true ;表示构建suggest的索引,全部构建会耗时。可优化。

suggest.dictionary=AnalyzingSuggester ;指明使用上面加入的suggester字典组件名字

返回结果"responseHeader": {

"status": 0,

"QTime": 10

},

"command": "build",

"suggest": {

"AnalyzingSuggester": {

"aoa": {

"numFound": 3,

"suggestions": [

{

"term": "aoa lee",

"weight": 0,

"payload": "7859b42e-3428-40c0-9036-6d50767a5ff2"

},

{

"term": "aoa lee key",

"weight": 0,

"payload": "0bead5d5-2570-44ba-830b-030f8a888ea3"

},

{

"term": "aoa lee key lol bob",

"weight": 0,

"payload": "9cc3c4d7-7d34-422b-8164-a4c4c92caa08"

}

]

}

}

}

}

返回的结果中主要有三个参数:term ;表示命中的结果记录

weight ;表示权重

payload ;表示负载,也可用于返回某一个值,这里我们在searchComponent配置的 表示负载返回我们的id,可以通过id做其他业务需求。

你可能感兴趣的:(php,solr,全文检索引擎)