我正在学习使用 azure 搜索,但我找不到在 ItemId 字段中搜索带有中间破折号的术语的方法,不在乎要搜索的术语是在开头还是在中间。
我的索引中有这些字段和数据
+-----+--------------------+-------------+
| Cat | ItemId | Description |
+-----+--------------------+-------------+
| 100 | 400800-1100103U | desc item 1 |
| 100 | 400800-11001066 | desc item 2 |
| 100 | 400800-11001068 | desc item 3 |
| 101 | 400800-110010F6 | desc item 4 |
+-----+--------------------+-------------+
这是我的索引字段配置:
+-------------+-------------+-----------+-----------+-----------+------------+
| Field Name | Retrievable | Filerable | Sortable | Facetable | Searchable |
+-------------+-------------+-----------+-----------+-----------+------------+
| Cat | OK | OK | OK | OK | X |
| ItemId | OK | OK | OK | OK | OK |
| Description | OK | | | | |
+-------------+-------------+-----------+-----------+-----------+------------+
这是我对字段 ItemId 的自定义分析器,即使有中间破折号,也只生成一个标记。
{
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"name": "keyword_lowercase",
"tokenizer": "keyword_v2",
"tokenFilters": [
"lowercase"
],
"charFilters": []
}
如果我用这个查询搜索:$select=RowKey&search=400800-1100*
我得到这些结果:
- 400800-1100103U
- 400800-11001066
- 400800-11001068
- 400800-110010F6
但是,如果我尝试使用这样的中间词进行搜索:$select=RowKey&search=RowKey:(00800-1100*)~
我得到 0 个结果。
那么如何在ItemId中搜索带有中间破折号的术语,而不关心搜索它的术语是在开头还是在中间?