首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure搜索-语音搜索实现

Azure搜索-语音搜索实现
EN

Stack Overflow用户
提问于 2019-02-07 09:59:15
回答 2查看 738关注 0票数 1

我正在尝试使用Azure搜索来进行光搜索,没有多少运气。我的目标是制定一个索引配置,可以处理排字和容纳语音搜索的最终用户。

使用下面的配置和示例数据,我试图搜索有意拼写错误的单词,如“softvare”或“alek”。我得到了“alek”的结果,谢谢语音分析器;但是没有得到任何关于“softvare”的结果。

看来对于这一要求,语音搜索不会奏效。

我发现的唯一选择是使用同义词映射。主要的缺陷是我无法使用语音/自定义分析器以及同义词:

你会推荐什么样的策略来处理排字?

使用搜索查询

  1. ?api-version=2017-11-11&search=alec
  2. ?api-version=2017-11-11&search=softvare

以下是索引配置

代码语言:javascript
复制
 "name": "phonetichotels",  
 "fields": [
   {"name": "hotelId", "type": "Edm.String", "key":true, "searchable": false},
   {"name": "baseRate", "type": "Edm.Double"},
   {"name": "description", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false, "analyzer":"my_standard"},
   {"name": "hotelName", "type": "Edm.String", "analyzer":"my_standard"},
   {"name": "category", "type": "Edm.String", "analyzer":"my_standard"},
   {"name": "tags", "type": "Collection(Edm.String)", "analyzer":"my_standard"},
   {"name": "parkingIncluded", "type": "Edm.Boolean"},
   {"name": "smokingAllowed", "type": "Edm.Boolean"},
   {"name": "lastRenovationDate", "type": "Edm.DateTimeOffset"},
   {"name": "rating", "type": "Edm.Int32"},
   {"name": "location", "type": "Edm.GeographyPoint"}
  ],

分析器(索引创建的一部分)

代码语言:javascript
复制
"analyzers":[
    {
      "name":"my_standard",
      "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
      "tokenizer":"standard_v2",
      "tokenFilters":[ "lowercase", "asciifolding", "phonetic" ]
    }
  ]

分析“软件”的API输入和输出

代码语言:javascript
复制
{
     "analyzer":"my_standard",
     "text": "software"
  }

{
    "@odata.context": "https://ctsazuresearchpoc.search.windows.net/$metadata#Microsoft.Azure.Search.V2017_11_11.AnalyzeResult",
    "tokens": [
        {
            "token": "SFTW",
            "startOffset": 0,
            "endOffset": 8,
            "position": 0
        }
    ]
}

分析“softvare”的API输入和输出

代码语言:javascript
复制
{
     "analyzer":"my_standard",
     "text": "softvare"
  }

{
    "@odata.context": "https://ctsazuresearchpoc.search.windows.net/$metadata#Microsoft.Azure.Search.V2017_11_11.AnalyzeResult",
    "tokens": [
        {
            "token": "SFTF",
            "startOffset": 0,
            "endOffset": 8,
            "position": 0
        }
    ]
}

我加载的示例数据

代码语言:javascript
复制
{
         "@search.action": "upload",
         "hotelId": "5",
         "baseRate": 199.0,
         "description": "Best hotel in town for software people",
         "hotelName": "Fancy Stay",
         "category": "Luxury",
         "tags": ["pool", "view", "wifi", "concierge"],
         "parkingIncluded": false,
         "smokingAllowed": false,
         "lastRenovationDate": "2010-06-27T00:00:00Z",
         "rating": 5,
         "location": { "type": "Point", "coordinates": [-122.131577, 47.678581] }
       },
{
         "@search.action": "upload",
         "hotelId": "6",
         "baseRate": 79.99,
         "description": "Cheapest hotel in town ",
         "hotelName": " Alec Baldwin Motel",
         "category": "Budget",
         "tags": ["motel", "budget"],
         "parkingIncluded": true,
         "smokingAllowed": true,
         "lastRenovationDate": "1982-04-28T00:00:00Z",
         "rating": 1,
         "location": { "type": "Point", "coordinates": [-122.131577, 49.678581] }
       },

有了正确的配置,即使拼写错误的单词,我也应该得到结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-13 12:31:58

正如你在我的文章中所读到的,我的目标是处理排字。

唯一简单的选择是使用内置的Lucene功能-模糊搜索。我还没有检查响应时间,因为要使用模糊搜索,必须将querytype设置为“full”。否则,结果令人满意。

示例:search=softvare~&fuzzy=true&querytype=full将返回包含“软件”的所有文档。

欲进一步阅读,请浏览文档

票数 1
EN

Stack Overflow用户

发布于 2019-02-08 01:10:36

我从事Azure搜索。在提出处理拼写错误单词的方法之前,最好先看看您的自定义分析器(my_standard)配置。它可能会告诉我们为什么它不能处理“softvare”的情况。作为一个DIY,您可以使用分析API来查看使用自定义分析器创建的令牌,并且它应该包含“软件”以实际匹配文档。

现在,这里有几种方法可以单独使用,也可以结合使用来处理拼写错误的单词。最佳方法因用例而异,我强烈建议您尝试使用这些方法,以找出您的案例中的最佳方法。

  1. 您已经熟悉了语音过滤器,这是处理类似发音术语的一种常见方法。如果您还没有,尝试不同的编码器为过滤器,以评估哪一种配置给你最好的结果。查看编码器的列表这里
  2. 使用Azure搜索中Lucene查询语法中支持的模糊查询,该语法根据距离返回接近原始查询项的术语。这里的限制是,它只适用于一个术语。有关更多细节,请查看文档。示例查询类似于- search=softvare~1,在原始术语也是有效术语的情况下,您也可以使用术语增强来给原始术语更多的提升。
  3. 您还提到了同义词,它也用于使用拼写错误的单词进行查询。这种方法使您对处理排字的过程有了最大的控制,但也要求您事先了解不同类型的字词。如果您想尝试使用同义词,可以使用这些文档
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54570674

复制
相关文章

相似问题

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