Lucene 在Azure搜索中使用StartsWith进行搜索

Lucene 在Azure搜索中使用StartsWith进行搜索,lucene,azure-cognitive-search,Lucene,Azure Cognitive Search,我有一个场景,我必须使用Azure search使用供应商名称搜索供应商。例如,下面是供应商列表 资讯科技有限公司 资讯系统有限公司 信息解决方案 Infosys公司技术 戴尔电脑 第一信息系统 我的搜索场景是 当Searchtext为Info时,它应返回1,2,3,4 当Searchtext为Infosys时,它应返回1,2,4 当Searchtext为Infosys Tech时,它应仅返回1而不是4 我还尝试了供应商名称字段上的关键字分析器,它也没有给出我期望的结果。基本上,我希望搜索文本从

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

资讯科技有限公司 资讯系统有限公司 信息解决方案 Infosys公司技术 戴尔电脑 第一信息系统 我的搜索场景是

当Searchtext为Info时,它应返回1,2,3,4 当Searchtext为Infosys时,它应返回1,2,4 当Searchtext为Infosys Tech时,它应仅返回1而不是4 我还尝试了供应商名称字段上的关键字分析器,它也没有给出我期望的结果。基本上,我希望搜索文本从供应商名称字段startswith开始搜索,而不是在每个单词standard上。Lucene Analyzer分别搜索供应商名称的每个单词

在这种情况下,您能否帮助我构建查询框架。

两者都支持前缀搜索查询,如prefix*,并查找包含以前缀查询开头的术语的文档

因此,您可以尝试像search=info*&searchmode=all或search=infosys-tech*&searchmode=all这样的方法,它应该可以工作

如果您想要更高级的正则表达式类搜索,您可以同时参考这两个,并支持前缀*等前缀搜索查询,并查找包含以前缀查询开头的术语的文档

因此,您可以尝试像search=info*&searchmode=all或search=infosys-tech*&searchmode=all这样的方法,它应该可以工作

如果您想要更高级的正则表达式搜索,可以参考Nate Ko的答案:

看起来您想对整个数据库发出前缀搜索查询 字段值不在字段中的单个项上。在这种情况下,, 您需要使用关键字分析器,以便整个字段值 标记化为单个标记。例如,给定第16大道SE为 默认情况下,Azure Search使用标准analyzer和标记化 输入到多个术语中,如,以及前缀 搜索是根据标记化的术语进行的。如果你使用关键字 相反,整个字段值被标记为单个值 令牌as和前缀search=16*将仅查找 字段以前缀开头的文档。同样地 通过regex search=/.*ave/进行后缀搜索将仅查找带有字段的文档 以后缀结尾。以下是与此相关的问题 堆栈溢出

从奈特·柯的回答来看:

看起来您想对整个数据库发出前缀搜索查询 字段值不在字段中的单个项上。在这种情况下,, 您需要使用关键字分析器,以便整个字段值 标记化为单个标记。例如,给定第16大道SE为 默认情况下,Azure Search使用标准analyzer和标记化 输入到多个术语中,如,以及前缀 搜索是根据标记化的术语进行的。如果你使用关键字 相反,整个字段值被标记为单个值 令牌as和前缀search=16*将仅查找 字段以前缀开头的文档。同样地 通过regex search=/.*ave/进行后缀搜索将仅查找带有字段的文档 以后缀结尾。以下是与此相关的问题 堆栈溢出


search=info*&searchmode=all返回1,2,3,4,6。但就我而言,我只想要1,2,3,4。结果6不应该出现。基本上,搜索应该总是从第一个单词开始。search=info*&searchmode=all返回1,2,3,4,6。但就我而言,我只想要1,2,3,4。结果6不应该出现。基本上,搜索应该总是从第一个单词开始。你找到解决办法了吗?你好。你找到解决办法了吗?