【问题标题】:Azure Search - Additional Stop WordsAzure 搜索 - 其他停用词
【发布时间】:2017-06-07 23:51:14
【问题描述】:

在 Azure 搜索中创建索引定义时,有没有办法为该索引添加额外的停用词。例如,如果您要对街道名称进行索引,则希望去掉 Road、Close、Avenue 等。

如果使该字段不可搜索,即整个事物被索引为一个术语,那么像 Birken Court Road 这样的事情会发生什么。被索引的术语会是 Birken Court。 非常感谢

【问题讨论】:

    标签: azure-cognitive-search


    【解决方案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"]
        }
     ]
    }
    

    在这个索引定义中,我在 text 字段上设置了一个自定义分析器,它使用了 standard 标记器、lowercase 标记过滤器和两个stopwords 标记过滤器,一个用于标准英语停用词,一个用于附加的一组停用词。您可以使用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

    【讨论】:

    • 非常感谢。非常有帮助。有没有办法创建一个分析器来删除停用词但保持其他所有内容不变。即如果停用词包括“Road”,则分析器将标记化:Birken Court Road 为“Birken Court”。再次感谢。
    猜你喜欢
    • 2014-12-02
    • 1970-01-01
    • 2013-04-07
    • 2016-11-22
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多