我想知道*如何在天蓝色搜索服务中工作。目前,我为我的数据创建了索引,并通过在" search"中提供以下数据进行查询。在json的领域。
但在所有情况下,我都得到相同的结果。我想知道在Azure搜索中如何解释*(或任何其他特殊字符)。
如果所有这些都给出相同的结果,我应该使用哪一个来获得最佳性能?
由于
添加更多详情:
我有以下条目: ATM,ATM 1,ATM 2,ATM *
在所有3个案例中,我得到了这4个结果。在第一种情况下,它应该只返回1个结果(ATM);在第二种情况下所有结果;在第三种情况下ATM *。
答案 0 :(得分:1)
在这种情况下,预计所有三个搜索查询都会返回相同的结果。
在编制索引时,文档会进行词法分析。文档中的文本被标记为术语,并且诸如删除符号和标点符号以及词干化/词形还原化之类的附加处理被完成。假设您使用的是默认的标准分析器,您将从doc内容中获得以下标记:
DOC1。 ATM => atm
DOC2。 ATM 1 => atm,1
doc3的。 ATM 2 => atm,2
doc5。 ATM * => atm(默认丢弃的标点和符号)
术语令牌存储在倒排索引中,用于查找包含术语的文档。
在查询时,搜索查询也会经历相同的分析过程。标准分析器对(低级)术语进行标准化并丢弃标点符号。因此,两个搜索查询" ATM"和#34; ATM *"被分析为atm并返回相同的结果。通配符搜索查询" ATM *"经历一个略有不同的道路。通配符前缀查询扩展为以前缀开头的反向索引中的术语。所以,如果你有ATM1'和' ATM2' (文件中没有空格),野外搜索查询' ATM *'也会匹配那些。
由于查询扩展过程,通配符搜索查询(ATM *)通常比精确搜索查询(ATM或ATM *)慢得多。
此外,如果您需要能够找到包含特殊字符的字词(例如,' *'),请查看custom analysis in Azure Search。我们为用户提供了不同的方式来定制分析链。
Nate