首页 > 解决方案 > 如何使用天蓝色建议搜索(节点)搜索特殊字符

问题描述

假设我有一个包含以下数据的 cosmosdb

{id: 1, name : "$abc"}, {id: 2, name : "cdf>>"}, {id : 3,name : "xyz"}

我正在使用 azure search api 使用Node JS搜索此集合的索引。

api post body : {
filter : ,
search: ,
top: ,
suggesterName:,
}

在搜索参数的请求正文中。如果我直接给出特殊字符或通过转义特殊字符,我会收到一条错误消息 Invalid Search Syntax (search : '$' or search : '$') 。

当我对搜索字符串进行 URL 编码并将其发送到 api 时,不会发生错误。但是使用特殊字符搜索不起作用(比如搜索:'$'($ 将被编码)-> 不会返回 {id: 1, name: "$abc"},但使用搜索搜索:'x' -> 返回{id:3,名称:“xyz”})。

任何人都可以帮助我理解,即使在使用特殊字符进行搜索时,我需要做些什么才能从 azure api 获得响应,因为我对 azure 真的很陌生。

标签: node.jsazureazure-cosmosdbazure-cognitive-searchazure-cognitive-services

解决方案


我在我这边测试过,可以看到如下截图,可以得到结果。与使用 sdk 相同。您能否尝试我的查询或提供有关如何创建索引或代码的更多详细信息?

通过 rest api 发布请求:

const options = {
        headers: {
            'content-type': 'application/json',
            'api-key': 'B556BCC1715872292DB1878EA4FB7EE9'
        }
    };
    axios.post('https://search_service_name.search.windows.net/indexes/index_name/docs/search?api-version=2020-06-30-Preview', 
        { "search": "$abc" }, options)
        .then(response => {
        console.log(response.data);
    });

在此处输入图像描述

使用 SDK:

const indexClient = new SearchIndexClient(endpoint, new AzureKeyCredential(apiKey));
const searchClient = indexClient.getSearchClient(indexName);
searchOptions = {
        searchFields: ["name"]
    };

    searchResults = await searchClient.search("cdf>>", searchOptions);
    for await (const result of searchResults.results) {
        console.log(`${JSON.stringify(result.document)}`);
    }

在此处输入图像描述

在工具中调用api: 在此处输入图像描述

这是我在集合中的数据:

{
    "id": "3",
    "category": "fun",
    "name": "$abc",
    "description": "Complete Cosmos DB Node.js Quickstart ⚡",
    "isComplete": true,
    "_rid": "zJlUAP-8snQCAAAAAAAAAA==",
    "_self": "dbs/zJlUAA==/colls/zJlUAP-8snQ=/docs/zJlUAP-8snQCAAAAAAAAAA==/",
    "_etag": "\"9e0123dd-0000-1800-0000-608661760000\"",
    "_attachments": "attachments/",
    "_ts": 1619419510
},
{
    "id": "4",
    "category": "fun",
    "name": "cdf>>",
    "description": "aasssddd",
    "isComplete": true,
    "_rid": "zJlUAP-8snQDAAAAAAAAAA==",
    "_self": "dbs/zJlUAA==/colls/zJlUAP-8snQ=/docs/zJlUAP-8snQDAAAAAAAAAA==/",
    "_etag": "\"9e0128dd-0000-1800-0000-608661970000\"",
    "_attachments": "attachments/",
    "_ts": 1619419543
}

推荐阅读