Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 如何在不需要精确匹配的情况下避开谷歌应用程序引擎搜索中的特殊运算符/符号?_Google App Engine - Fatal编程技术网

Google app engine 如何在不需要精确匹配的情况下避开谷歌应用程序引擎搜索中的特殊运算符/符号?

Google app engine 如何在不需要精确匹配的情况下避开谷歌应用程序引擎搜索中的特殊运算符/符号?,google-app-engine,Google App Engine,在不需要精确匹配的情况下,如何在谷歌应用程序引擎搜索查询中避开特殊运算符/符号?特别是,我想知道如何避免双重引用 其他特殊符号/运算符: 反斜杠 单引号 及 或 不是 ~ 冲刺 : , 加上 ( ) 中描述的解决方案 建议将查询括在双引号中,但我不希望通过精确匹配进行搜索 例如,我希望查询“foo bar”与字符串“bar foo”匹配,而不仅仅是“foo bar”。您列出的特殊符号不需要完全转义。如前所述,在索引文档时,搜索API会去掉您列出的大多数字符,因此将它们包含在查询字符串中没有

在不需要精确匹配的情况下,如何在谷歌应用程序引擎搜索查询中避开特殊运算符/符号?特别是,我想知道如何避免双重引用

其他特殊符号/运算符:

  • 反斜杠

  • 单引号

  • 不是

  • ~

  • 冲刺

  • :

  • ,

  • 加上

  • (

  • )

中描述的解决方案 建议将查询括在双引号中,但我不希望通过精确匹配进行搜索


例如,我希望查询“foo bar”与字符串“bar foo”匹配,而不仅仅是“foo bar”。

您列出的特殊符号不需要完全转义。如前所述,在索引文档时,搜索API会去掉您列出的大多数字符,因此将它们包含在查询字符串中没有任何好处。事实上,如前所述,在许多情况下,它们也从查询字符串中剥离出来。因此,在大多数情况下不需要特殊处理;搜索API将在文档和查询中忽略它们

不过,您可能需要确保它们不会干扰查询本身。例如,括号不会从查询字符串中删除,而是分组查询。这是我的算法,用于清理用户输入的字符串以传递给搜索API。它可能不完整,也可能不是您想要的,但它可能是您的起点:

  • 如果字符串仅包含标点和空格,则不返回任何结果(否则搜索API将返回所有文档)
  • 将这些字符替换为空格:
    :=()~,
  • 将整个查询的大小写改为小写(这避免了将
    视为布尔运算符,正如您已经发现的那样,并且搜索不区分大小写)
  • 如果有奇数个
    字符,请再添加一个(我忘记了原因…这可能是因为我向用户输入的查询字符串添加了更多术语)
  • 您提到要“转义”
    字符。如果您不希望用户能够指定精确的匹配,我建议将其替换为空格


    如果您发现更多需要添加到此列表中的内容,请让我知道

    您列出的特殊符号不需要转义。如前所述,在索引文档时,搜索API会去掉您列出的大多数字符,因此将它们包含在查询字符串中没有任何好处。事实上,如前所述,在许多情况下,它们也从查询字符串中剥离出来。因此,在大多数情况下不需要特殊处理;搜索API将在文档和查询中忽略它们

    不过,您可能需要确保它们不会干扰查询本身。例如,括号不会从查询字符串中删除,而是分组查询。这是我的算法,用于清理用户输入的字符串以传递给搜索API。它可能不完整,也可能不是您想要的,但它可能是您的起点:

  • 如果字符串仅包含标点和空格,则不返回任何结果(否则搜索API将返回所有文档)
  • 将这些字符替换为空格:
    :=()~,
  • 将整个查询的大小写改为小写(这避免了将
    视为布尔运算符,正如您已经发现的那样,并且搜索不区分大小写)
  • 如果有奇数个
    字符,请再添加一个(我忘记了原因…这可能是因为我向用户输入的查询字符串添加了更多术语)
  • 您提到要“转义”
    字符。如果您不希望用户能够指定精确的匹配,我建议将其替换为空格


    如果您发现更多需要添加到此列表中的内容,请让我知道

    考虑到“s”是查询,我只能在python中转义上面的操作符的子集:s=s.replace('AND','AND')、s=s.replace('OR','OR')、s=s.replace('NOT','NOT')、s=s.replace('-','\\\\-')、s=s.replace('NOT','NOT')。这是通过反复试验(与谷歌的任何官方文档相比)发现的。我希望谷歌能正式记录这一点。注意,上面的内容只适用于本地开发应用服务器和ferris3单元测试。也就是说,本地gae部署似乎存在一个bug,其中破折号、小于、大于和加号可以通过查询转义和搜索,并在文档中建立索引。在实际的云部署中,这些符号似乎不可搜索。考虑到查询是“s”,我只能在python中转义上面的操作符的子集:s=s.replace('AND','AND')、s=s.replace('OR','OR')、s=s.replace('not','not')、s=s.replace('-'、'\\\\\-')、s=s.replace('。这是通过反复试验(与谷歌的任何官方文档相比)发现的。我希望谷歌能正式记录这一点。注意,上面的内容只适用于本地开发应用服务器和ferris3单元测试。也就是说,本地gae部署似乎存在一个bug,其中破折号、小于、大于和加号可以通过查询转义和搜索,并在文档中建立索引。在实际的云部署中,这些符号似乎不可搜索。