我似乎无法弄清楚如何通过弹性搜索(通过pyes访问)来搜索复数/单数术语。例如,当我进入Monkies时,我想得到带有腰带的结果。我看过Elasticsearch not returning singular/plural matches但似乎无法理解它。这是一些卷曲声明
curl -XDELETE localhost:9200/myindex
curl -XPOST localhost:9200/myindex -d '
{"index":
{ "number_of_shards": 1,
"analysis": {
"filter": {
"myfilter": {
"type" : "porter_stem",
"language" : "English"
}
},
"analyzer": {
"default" : {
"tokenizer" : "nGram",
"filter" : ["lowercase", "myfilter"]
},
"index_analyzer" : {
"tokenizer" : "nGram",
"filter" : ["lowercase", "myfilter"]
},
"search_analyzer" : {
"tokenizer" : "nGram",
"filter" : ["lowercase", "myfilter"]
}
}
}
}
}
}'
curl -XPUT localhost:9200/myindex/mytype/_mapping -d '{
"tweet" : {
"date_formats" : ["yyyy-MM-dd", "dd-MM-yyyy"],
"properties" : {
"user": {"type":"string"},
"post_date": {"type": "date"},
"message" : {"type" : "string", "analyzer": "search_analyzer"}
}
}}'
curl -XPUT 'http://localhost:9200/myindex/mytype/1' -d '{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "belt knife is a cool thing"
}'
curl -XPUT 'http://localhost:9200/myindex/mytype/2' -d '{
"user" : "alwild",
"post_date" : "2009-11-15T14:12:12",
"message" : "second message with nothing else"
}'
curl -XGET localhost:9200/myindex/mytype/_search?q=message:belts
我已经到了寻找皮带给我一些结果的地步......但现在它给出了太多的结果。我该怎么办才能让它只返回一个带有“腰带”的条目?
答案 0 :(得分:3)
默认情况下,您的查询是针对_all
字段执行的,该字段使用标准分析器,因此您没有词干。尝试使用name:Monkies
等查询进行搜索。出于生产目的,请使用match
查询,该查询将在查询和字段映射之间正确连接分析器。
顺便说一句,Elasticsearch可以很容易地比较不同的分析设置。比较:
http://localhost:9200/_analyze?text=Monkies&analyzer=standard
VS
http://localhost:9200/_analyze?text=Monkies&analyzer=snowball
答案 1 :(得分:0)
您是否可以将此减少为使用此映射创建索引的几个curl调用,索引某些数据,并执行显示您不期望的结果的搜索?