【发布时间】:2021-12-26 15:33:02
【问题描述】:
我们有不同语言的文件。为了能够搜索不同语言的文档,我们创建了一个索引,每种语言都有一个字段。我们确保根据文档的语言填写适用的字段。 (其他字段为空)我们不知道搜索的是哪种语言,因此我们确保搜索所有字段,因此始终搜索适用的字段。
当用户提供包含干扰词/停用词的搜索查询时,我们遇到了问题。当我们使用 searchMode=all 并使用语言分析器时,它似乎从结果集中删除了完全有效的搜索结果。 例如,我们在索引中有以下文本来测试这种行为: 名称中带有 和 it 的文档标题
当我们使用以下搜索查询时,我们会得到预期的搜索结果: search=文档标题名称&QueryType=full&searchMode=all&$count=true
但是,当我们尝试搜索确切的标题(或者甚至添加一些干扰词,例如 with、the 和 in)时,使用 en.microsoft 分析器时不会返回结果。当我们使用另一种语言分析器(使用其他噪音/停用词)时,将返回结果。 我们在使用荷兰语索引时使用 nl.microsoft 分析器得到了类似的结果,并尝试搜索还包含荷兰语噪音/停用词(如“bij”、“in”或“en”)的文本,而这是索引文本的一部分。
有没有办法解决这个问题?使用语言分析器时,这是搜索中的错误吗? 我假设如果我们创建一个搜索查询来搜索过滤噪音/停用词的索引,那么在执行搜索查询之前,认知搜索也会从查询中删除噪音/停用词。
注意:我们还发现了以下 stackoverflow 帖子: Queries with stopwords and searchMode=all return no results 似乎仅当我们使用不同语言搜索多个字段时才会出现此问题。我可以确认这一点。如果我只使用以下查询搜索英文字段来测试搜索查询,我们会得到预期的结果: search=文档标题名称&QueryType=full&searchMode=all&searchFields=Title_enus&$count=true
但是,当我尝试搜索使用英语和荷兰语的两个字段时,我不再得到英语结果: search=文档标题名称&QueryType=full&searchMode=all&searchFields=Title_enus,Title_nlnl&$count=true
我们的实际情况与本文略有不同,因为我们使用 OR 子句在多个字段中进行搜索。如果我进行更多测试并可以提供准确的测试查询(包括其结果),我会更新这篇文章。
【问题讨论】:
-
您能否提供一些最小样本记录、您使用的查询和预期结果?不清楚你的意思。您说您的实际情况不同,并且您使用 OR 查询。您发布的查询使用 AND(隐式)。我认为您的链接文章stackoverflow.com/questions/43671272/… 解释得很好。