在Azure搜索中创建一个支持双方的EdgeNGram分析器

问题描述:

为Azure搜索定义自定义分析器时,可以从this列表中定义一个令牌过滤器。 我正试图支持搜索前缀和中缀。 例如:如果一个字段包含名称:123 456,我想搜索的条件包含:在Azure搜索中创建一个支持双方的EdgeNGram分析器

1 
12 
123 
23 
3 
4 
45 
456 
56 
6 

当使用这似乎这样的伎俩在EdgeNGramTokenFilterV2,有确定了“边”的选项财产,但只支持“前”和“后”,而不是两者。 “前”(缺省)值,生成该列表:

1 
12 
123 
4 
45 
456 

和后生成:

123 
23 
3 
456 
56 
6 

我尝试使用两个令牌2个EdgeNGramTokenFilterV2s,但是这两个滤波器组合如创建术语“2”或“5”:

1 
12 
123 
23 
3 
4 
45 
456 
56 
6 
2 // Unwanted 
5 // Unwanted 

我也尝试使用“反向”的道理,但是这一切都颠倒,结果仍然是错误的。

我只使用一个搜索字段(“名称”),并希望它保持这样。 (想到可以使用不同分析器使用名为“name_reverse”的不同字段的选项,但这样做效率很低,并且在将搜索引擎连接到数据源时会导致很多头痛的问题。是当前索引创建请求:

{ 
"name": "testindexboth", 
"fields": [ 
    {"name": "id", "type": "Edm.String", "key": true }, 
    {"name": "Name", "type": "Edm.String", "searchable": true, "analyzer": "myAnalyzer"} 
], 
"myAnalyzer": [ 
    { 
    "name": "myAnalyzer", 
    "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer", 
    "tokenizer": "standard_v2", 
    "tokenFilters":["front_filter", "back_filter"] 
    }], 

    "tokenFilters":[ 
      { 
       "name":"front_filter", 
       "@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilterV2", 
       "maxGram":15, 
       "side": "front" 
      }, 
         { 
       "name":"back_filter", 
       "@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilterV2", 
       "maxGram":15, 
       "side": "back" 
      } 
     ] 
} 

是否有结合两者的选择,而不让他们忙乱起来的结果

添加两个字段到索引,用两个不同的自定义分析:一个前缀,一个用于后缀,当查询时,查询两个字段。

+0

它肯定会工作,但似乎有点像黑客,你不觉得吗?它也迫使我使用一个字段映射函数。 –