【问题标题】:Search using StartsWith in Azure Search在 Azure 搜索中使用 StartsWith 进行搜索
【发布时间】:2019-05-04 08:48:04
【问题描述】:

我有一个场景,我必须使用 Azure 搜索使用供应商名称来搜索供应商。例如下面是供应商列表。

  1. 印孚瑟斯科技有限公司
  2. Infosys BPM 有限公司
  3. Infor 解决方案
  4. Infosys 企业技术
  5. 戴尔电脑
  6. 第一信息系统

我的搜索场景是

  1. 当 Searchtext 为 Info 时,它应该返回 1,2,3,4
  2. 当 Searchtext 为 Infosys 时,它应该返回 1,2,4
  3. 当 Searchtext 为 Infosys Tech 时,它应该只返回 1 而不是 4

我还在供应商名称字段上尝试了关键字分析器,但它也没有给出我预期的结果。基本上,我希望搜索文本从供应商名称字段的开头(startswith)开始搜索,而不是单独搜索供应商名称的每个单词(Standard.Lucene Analyzer 搜索每个单词)。

您能否在这种情况下帮助我了解如何构建我的查询。

【问题讨论】:

  • 你好。你找到解决办法了吗?

标签: lucene azure-cognitive-search


【解决方案1】:

来自 Nate Ko 的回答 here

您似乎想对整个文件发出前缀搜索查询 字段值不在字段中的单个术语上。在这种情况下, 您需要使用关键字分析器,以便整个字段值是 标记为单个标记。例如,给定“16th Ave SE”为 输入,默认情况下 Azure 搜索使用标准分析器并标记化 输入多个术语,如 、 和前缀 搜索是根据标记化的术语发出的。如果你使用关键字 分析器,而是将整个字段值标记为单个 标记为 和前缀搜索 search=16th* 只会找到 具有以前缀开头的字段的文档。同样, 通过 regex search=/.*ave/ 进行后缀搜索只会找到带有字段的文档 以后缀结尾。下面是相关问题 堆栈溢出。

http://stackoverflow.com/questions/40056213/behavior-of-asterisk-in-azure-search-service/40137948#40137948

http://stackoverflow.com/questions/40857057/how-to-practially-use-a-keywordanalyzer-in-azure-search

【讨论】:

    【解决方案2】:

    Simple query syntaxLucene query syntax 都支持前缀搜索查询,例如“prefix*”,并查找包含以前缀查询开头的术语的文档。

    所以您可以尝试search=info*"&searchmode=allsearch=infosys tech*&searchmode=all 之类的方法,它应该可以工作。

    如果你想要更高级的正则表达式,比如搜索,可以参考Regular expression search

    【讨论】:

    • search=info*"&searchmode=all 返回 1,2,3,4,6。但在我的情况下,我只想要 1,2,3,4。结果 6 不应该出现。基本上搜索应始终从第一个单词开始。
    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2018-02-20
    • 2018-05-01
    • 2018-02-13
    相关资源
    最近更新 更多