搜索索引的时候,通常都会出现同义词现象。比如搜索安全套,那避孕套也要出来呀。
这就要建设同义词啦。
1:其实同义词道理很简单,先配置分词和过滤见下面配置
index.analysis.analyzer.default.type: ik
index:
analysis:
analyzer:
ik_smart:
type: ik
use_smart: true
ik_max_word:
type: ik
use_smart: false
ik_syno:
type: custom
tokenizer: ik_max_word
filter: [my_synonym_filter]
ik_syno_smart:
type: custom
tokenizer: ik_smart
filter: [my_synonym_filter]
filter:
my_synonym_filter:
type: synonym
synonyms_path: synonym.txt
2: 创建索引
curl -XPOST 'work.node1:9200/librarytest'
curl -XPOST 'work.node1:9200/librarytest/book/_mapping' -d'
{
"book": {
"properties": {
"name": {
"type": "string",
"store": "yes",
"index": "analyzed",
"analyzer": "ik_syno",
"search_analyzer": "ik_syno"
}
}
}
}'
3:插入数据
curl -X PUT work.node1:9200/librarytest/book/11 -d '
{
"name" : "西红柿"
}'
curl -X PUT work.node1:9200/librarytest/book/2 -d '
{
"name" : "番茄"
}'
curl -X PUT work.node1:9200/librarytest/book/5 -d '
{
"name" : "我吃番茄"
}'
curl -X PUT work.node1:9200/librarytest/book/9 -d '
{
"name" : "我爱西红柿"
}'
curl -X PUT work.node1:9200/librarytest/book/21 -d '
{
"name" : "我爱tomato"
}'
curl -X PUT work.node1:9200/librarytest/book/41 -d '
{
"name" : "tomato"
}'
curl -X PUT work.node1:9200/librarytest/book/23 -d '
{
"name" : "toMaTo"
}'
curl -X GET work.node1:9200/librarytest/_search -d '
{
"query":{
"term":{
"name":"番茄"
}
}
4:查询就可以啦
curl -X GET work.node1:9200/librarytest/_search -d '
{
"query":{
"match_phrase": {
"name": {
"query": "西红柿",
"analyzer": "ik_syno"
}
}
}
}'