首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Elasticserach对整数的语音搜索结果

使用Elasticserach对整数的语音搜索结果
EN

Stack Overflow用户
提问于 2015-12-15 04:22:02
回答 2查看 234关注 0票数 2

原谅我,因为我不熟悉Elasticsearch,但我正在遵循这里的语音入门指南:Phonetic Matching

我有以下几点

代码语言:javascript
运行
复制
POST /app
{
    "settings": {
        "index": {
            "analysis": {
                "filter": {
                    "dbl_metaphone": {
                        "type": "phonetic",
                        "encoder": "double_metaphone"
                    }
                },
                "analyzer": {
                    "dbl_metaphone": {
                        "tokenizer": "standard",
                        "filter": "dbl_metaphone"
                    }
                }
            }
        }
    },
    "mappings": {
        "movie": {
            "properties": {
                "title": {
                    "type": "string",
                    "fields": {
                        "phonetic": {
                            "type": "string",
                            "analyzer": "dbl_metaphone"
                        }
                    }
                },
                "year": {
                    "type": "string",
                    "fields": {
                        "phonetic": {
                            "type": "string",
                            "analyzer": "dbl_metaphone"
                        }
                    }
                }
            }
        }
    } }

我通过执行以下操作来添加一些结果:

代码语言:javascript
运行
复制
POST /app/movie
{ "title": "300", "year": 2006"} & { "title":"500 days of summer", "year": "2009" }

我想通过输入这个查询来查询电影'300‘:

代码语言:javascript
运行
复制
POST /app/movie/_search
    {
        "query": {
            "match": {
                "title.phonetic": {
                    "query": "three hundred"
                }
            }
        }
    }

但是我没有得到任何结果。如果将我的查询更改为"300“,尽管它工作得很好。

如果我这样做了:

代码语言:javascript
运行
复制
GET /app/_analyze?analyzer=dbl_metaphone&text=300
{
  "tokens": [
    {
      "token": "300",
      "start_offset": 0,
      "end_offset": 3,
      "type": "<NUM>",
      "position": 0
    }
  ]
}

我看到只有一个数字标记返回,而不是字母数字版本,如下所示:

代码语言:javascript
运行
复制
GET /app/_analyze?analyzer=dbl_metaphone&text=three hundred
{
  "tokens": [
    {
      "token": "0R",
      "start_offset": 0,
      "end_offset": 5,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "TR",
      "start_offset": 0,
      "end_offset": 5,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "HNTR",
      "start_offset": 6,
      "end_offset": 13,
      "type": "<ALPHANUM>",
      "position": 1
    }
  ]
}

我的语音查询是否遗漏了什么东西,我应该定义这些东西来同时获得数字和字母数字令牌?

EN

回答 2

Stack Overflow用户

发布于 2015-12-15 09:26:56

这是不可能的。双变音位是一种语音编码算法。简单地说,它试图将发音相似的单词编码到同一个键。

这有助于搜索名称等可能拼写不同但发音相同的术语。

正如您从算法中看到的,double metaphone忽略数字/数字字符。您可以阅读有关double metaphone here的更多信息。

票数 1
EN

Stack Overflow用户

发布于 2015-12-18 04:06:55

语音匹配的一个更好的例子是当搜索查询是Jodi Stynehaser时找到"Judy Steinheiser“。

如果您需要能够使用英语搜索数字,那么您将需要在索引时创建一些同义词或替代文本,以便"300“和”三百“都存储在Elasticsearch中。

find/write a function that converts integers to English.应该不会太难

在构造文档以插入ES时调用您的函数。

或者,用Groovy和call it as a in your mapping. 编写它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34275900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档