Search 带词干的弹性搜索匹配
如何搜索词干匹配 也就是说,目前我有许多文档在Search 带词干的弹性搜索匹配,search,elasticsearch,stem,Search,elasticsearch,Stem,如何搜索词干匹配 也就是说,目前我有许多文档在项目标题字段中包含“skateboard”一词,但只有3个文档包含“skateboards”一词。因此,当我执行以下搜索时: POST /my_index/my_type/_search { "size": 100, "query" : { "multi_match": { "query": "skateboards", "fields": [ "item_title^3"
项目标题
字段中包含“skateboard”一词,但只有3个文档包含“skateboards”一词。因此,当我执行以下搜索时:
POST /my_index/my_type/_search
{
"size": 100,
"query" : {
"multi_match": {
"query": "skateboards",
"fields": [ "item_title^3" ]
}
}
}
我只得到3个结果。但是,我也希望返回带有“skateboard”字样的文件
从Elasticsearch的理解来看,我希望这是通过在item_title
字段上指定一个映射来实现的,该字段包含一个分析器,该分析器对每个单词的词干版本进行索引,但我似乎找不到关于如何实现这一点的文档,这表明它是以不同的方式完成的
建议?这里有一个例子:
PUT /stem
{
"settings": {
"analysis": {
"filter": {
"filter_stemmer": {
"type": "stemmer",
"language": "english"
}
},
"analyzer": {
"tags_analyzer": {
"type": "custom",
"filter": [
"standard",
"lowercase",
"filter_stemmer"
],
"tokenizer": "standard"
}
}
}
},
"mappings": {
"test": {
"properties": {
"item_title": {
"analyzer": "tags_analyzer",
"type": "text"
}
}
}
}
}
索引一些示例文档:
POST /stem/test/1
{
"item_title": "skateboards"
}
POST /stem/test/2
{
"item_title": "skateboard"
}
POST /stem/test/3
{
"item_title": "skate"
}
执行查询:
GET /stem/test/_search
{
"query": {
"multi_match": {
"query": "skateboards",
"fields": [
"item_title^3"
]
}
},
"fielddata_fields": [
"item_title"
]
}
并看到结果:
"hits": [
{
"_index": "stem",
"_type": "test",
"_id": "1",
"_score": 1,
"_source": {
"item_title": "skateboards"
},
"fields": {
"item_title": [
"skateboard"
]
}
},
{
"_index": "stem",
"_type": "test",
"_id": "2",
"_score": 1,
"_source": {
"item_title": "skateboard"
},
"fields": {
"item_title": [
"skateboard"
]
}
}
]
我还添加了
fielddata\u fields
元素,以便您可以查看字段内容的索引方式。正如您所看到的,在这两种情况下,索引项都是skateboard
,如果您使用的是较新版本的Elasticsearch()