Azure搜索 - 附加停用词

时间:2017-06-07 12:41:17

标签: azure-search

在Azure搜索中创建索引定义时,是否可以为该索引添加其他停用词。例如,如果您要为街道名称编制索引,则可以删除Road,Close,Avenue等。

如果一个人不能搜索该字段,即整个事件被编入一个术语,那么像Birken Court Road这样的事情会发生什么。这个词被索引的是Birken Court。 非常感谢

1 个答案:

答案 0 :(得分:1)

您可以使用custom analyzer定义一组额外的停用词。 例如,

{
 "name":"myindex",
 "fields":[
    {
       "name":"id",
       "type":"Edm.String",
       "key":true,
       "searchable":false
    },
    {
       "name":"text",
       "type":"Edm.String",
       "searchable":true,
       "analyzer":"my_analyzer"
    }
 ],
 "analyzers":[
    {
       "name":"my_analyzer",
       "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
       "tokenizer":"standard_v2",
       "tokenFilters":[
          "lowercase",
          "english_stopwords",
          "my_stopwords"
       ]
    }
 ],
 "tokenFilters":[
    {
       "name":"english_stopwords",
       "@odata.type":"#Microsoft.Azure.Search.StopwordsTokenFilter",
       "stopwordsList":"english"
    },
    {
       "name":"my_stopwords",
       "@odata.type":"#Microsoft.Azure.Search.StopwordsTokenFilter",
       "stopwords": ["road", "avenue"]
    }
 ]
}

在此索引定义中,我在使用标准标记生成器的文本字段上设置自定义分析器,小写标记过滤器和两个停用词标记过滤器,一个用于标准英语停用词,另一个用于另外一组停用词。您可以使用Analyze API测试自定义分析器的行为,例如:

请求:

{
   "text":"going up the road",
   "analyzer": "my_analyzer"
}

响应:

{
  "tokens": [
    {
      "token": "going",
      "startOffset": 0,
      "endOffset": 5,
      "position": 0
    },
    {
      "token": "up",
      "startOffset": 6,
      "endOffset": 8,
      "position": 1
    }
  ]
}

分析器不适用于不可搜索的字段,因此不会删除示例中的停用词。要了解有关查询和文档处理的更多信息,请参阅:How full text search works in Azure Search