不要急,总有办法的

查询只能单个字,词语查询不了

Elasticsearch | 作者 zz_hello | 发布于2018年10月08日 | 阅读数:4379

PUT /chinese
{
"index": {
"analysis": {
"filter": {
"my_synonym_filter": {
"type": "synonym",
"synonyms": [
"中国人民=>天朝人民",
"北京,帝都",
"北,帝",
"上海,魔都",
"南京=>金陵"
]
}
},
"analyzer": {
"my_synonyms": {
"tokenizer": "ik_smart",
"filter": [
"lowercase",
"my_synonym_filter"
]
}
},
"mappings": {
"products":{
"properties":{
"price":{
"type":"long"
},
"productID":{
"type":"text",
"analyzer":"my_synonyms"
}
}
}
}
}
}
}
添加索引语句如下
POST /chinese/products/_bulk
{"index": {"_id": 1}}
{ "price" : 10, "productID" : "北京的烤鸭" }
{ "index": { "_id": 2 }}
{ "price" : 20, "productID" : "天津的狗不理" }
{ "index": { "_id": 3 }}
{ "price" : 30, "productID" : "南京的水煮鸭" }
{ "index": { "_id": 4 }}
{ "price" : 30, "productID" : "上海的小笼包" }
查询语句如下
GET /chinese/products/_search
{
"query": {
"match": {
"productID": {
"analyzer": "my_synonyms",
"query": "京"
}
}
}
}
这样查询出来是有结果的,但是输入”北京“或者其他的词语,查询的结果都是null。
下面这个分词查看也是有的,分成了,北京,的,烤鸭
GET /chinese/_analyze
{
"analyzer": "my_synonyms",
"text":"北京的烤鸭"
}
有大神知道是为什么吗???拜谢呀

 
已邀请:

rochy - rochy_he

赞同来自: zz_hello

你的设置写错了,按照下面的建立索引即可
 
PUT chinese
{
"settings": {
"index": {
"analysis": {
"filter": {
"my_synonym_filter": {
"type": "synonym",
"synonyms": [
"中国人民=>天朝人民",
"北京,帝都",
"北,帝",
"上海,魔都",
"南京=>金陵"
]
}
},
"analyzer": {
"my_synonyms": {
"tokenizer": "ik_smart",
"filter": [
"lowercase",
"my_synonym_filter"
]
}
}
}
}
},
"mappings": {
"products": {
"properties": {
"price": {
"type": "long"
},
"productID": {
"type": "text",
"analyzer": "my_synonyms"
}
}
}
}
}

elasticStack - 90后it大数据男

赞同来自:

你查询的时候指定的是什么分词器

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

"analyzer": "my_synonyms", 改成:"analyzer": "ik_smart",

zqc0512 - andy zhou

赞同来自:

搞个插件 分词器问题。

zz_hello

赞同来自:

更新一下,如果只用IK分词器,如果建立索引的时候不指定ik分词器,在查询的时候指定analyzer还是只能查询单个汉字,必须要在建立索引的时候指定分词器吗?
另外,上面那个问题,我想要的是在IK分词器的基础上再建立一个近义词的分析器,索引那样建立了索引,但是就出现了这样的问题?所以问一下那要怎么建立近义词的分析器呢
PUT /chinese1
{
"mappings": {
"products": {
"properties": {
"price": {
"type": "long"
},
"productID": {
"type": "text",
"analyzer": "ik_smart"
}
}
}
}
}

POST /chinese1/products/_bulk
{"index": {"_id": 1}}
{ "price" : 10, "productID" : "北京的烤鸭" }
{ "index": { "_id": 2 }}
{ "price" : 20, "productID" : "天津的狗不理" }
{ "index": { "_id": 3 }}
{ "price" : 30, "productID" : "南京的水煮鸭" }
{ "index": { "_id": 4 }}
{ "price" : 30, "productID" : "上海的小笼包" }

GET /chinese1/products/_search
{
"query": {
"match": {
"productID": {
"query": "北京",
"analyzer": "ik_smart"
}
}
}
}

rochy - rochy_he

赞同来自:

已经测试过,查询单个字是没有结果的
查询“北京”可以返回结果

rochy - rochy_he

赞同来自:

你的步骤可能有一些问题
我的执行步骤是:
1. 执行 PUT /chinese
2. 执行 Bulk
3. 执行 _search
 
你可以看看 products 的 mapping,是不是没有生效呀

zz_hello

赞同来自:

1.PNG


捕获.PNG

 

rochy - rochy_he

赞同来自:

请按照我说的步骤进行执行,我的搜索结果

360截图-15354312.jpg

 

要回复问题请先登录注册