我正在尝试使用Azure搜索来进行光搜索,没有多少运气。我的目标是制定一个索引配置,可以处理排字和容纳语音搜索的最终用户。
使用下面的配置和示例数据,我试图搜索有意拼写错误的单词,如“softvare”或“alek”。我得到了“alek”的结果,谢谢语音分析器;但是没有得到任何关于“softvare”的结果。
看来对于这一要求,语音搜索不会奏效。
我发现的唯一选择是使用同义词映射。主要的缺陷是我无法使用语音/自定义分析器以及同义词:
你会推荐什么样的策略来处理排字?
使用搜索查询
?api-version=2017-11-11&search=alec?api-version=2017-11-11&search=softvare以下是索引配置
"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"}
],分析器(索引创建的一部分)
"analyzers":[
{
"name":"my_standard",
"@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
"tokenizer":"standard_v2",
"tokenFilters":[ "lowercase", "asciifolding", "phonetic" ]
}
]分析“软件”的API输入和输出
{
"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输入和输出
{
"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
}
]
}我加载的示例数据
{
"@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] }
},有了正确的配置,即使拼写错误的单词,我也应该得到结果。
发布于 2019-02-13 12:31:58
正如你在我的文章中所读到的,我的目标是处理排字。
唯一简单的选择是使用内置的Lucene功能-模糊搜索。我还没有检查响应时间,因为要使用模糊搜索,必须将querytype设置为“full”。否则,结果令人满意。
示例:search=softvare~&fuzzy=true&querytype=full将返回包含“软件”的所有文档。
欲进一步阅读,请浏览文档
发布于 2019-02-08 01:10:36
我从事Azure搜索。在提出处理拼写错误单词的方法之前,最好先看看您的自定义分析器(my_standard)配置。它可能会告诉我们为什么它不能处理“softvare”的情况。作为一个DIY,您可以使用分析API来查看使用自定义分析器创建的令牌,并且它应该包含“软件”以实际匹配文档。
现在,这里有几种方法可以单独使用,也可以结合使用来处理拼写错误的单词。最佳方法因用例而异,我强烈建议您尝试使用这些方法,以找出您的案例中的最佳方法。
search=softvare~1,在原始术语也是有效术语的情况下,您也可以使用术语增强来给原始术语更多的提升。https://stackoverflow.com/questions/54570674
复制相似问题