Indexing 具有特殊字符的字段值查询和返回意外结果的未筛选搜索?

Indexing 具有特殊字符的字段值查询和返回意外结果的未筛选搜索?,indexing,marklogic,marklogic-7,Indexing,Marklogic,Marklogic 7,当传递任何特殊字符@、=、$、%、^、*时,字段值查询将给出意外结果 请查找我在ML中插入的4个示例文档 <root> <journalTitle>Dinesh</journalTitle> <sourceType>JA</sourceType> <title>title1</title> <volume>volume0</volume> </root

当传递任何特殊字符@、=、$、%、^、*时,字段值查询将给出意外结果

请查找我在ML中插入的4个示例文档

<root>
    <journalTitle>Dinesh</journalTitle>
    <sourceType>JA</sourceType>
    <title>title1</title>
    <volume>volume0</volume>
</root>

<root>
    <journalTitle>Gayari</journalTitle>
    <sourceType>JA</sourceType>
    <title>title1</title>
    <volume>volume0</volume>
</root>

<root>
    <journalTitle>Dixit</journalTitle>
    <sourceType>JA</sourceType>
    <title>title1</title>
    <volume>volume0</volume>
</root>

<root>
    <journalTitle>Singla</journalTitle>
    <sourceType>JA</sourceType>
    <title>title1</title>
    <volume>volume0</volume>
</root>
运行此查询时,我将获取所有文档

根据我的理解,它应该返回一个空序列

请在下面找到我创建的字段

XML格式的字段:

索引设置:

如果我将在搜索字符串中添加任何字母,它将为我提供正确的结果

比如:

@$%F ====S df==$d
请帮助我解决此问题?

尝试将“精确”作为选项传递给cts:字段值查询:


MarkLogic有一个精确值的索引,在这种情况下可以提供帮助。注意,只有当您同时启用了区分大小写和区分重音的索引时,它才会启用。我知道这适用于cts:element值查询,所以我希望它也适用于cts:field值查询。

尝试将exact作为选项传递给cts:field值查询:


MarkLogic有一个精确值的索引,在这种情况下可以提供帮助。注意,只有当您同时启用了区分大小写和区分重音的索引时,它才会启用。我知道这适用于cts:element值查询,所以我希望它也适用于cts:field值查询。

在field值查询中使用'exact'选项

这需要快速区分重音和大小写的选项,但您已经启用了这些选项


您还可以在使用“精确”前后尝试xdmp:plan,以查看对查询计划的影响。

在字段值查询中使用“精确”选项

这需要快速区分重音和大小写的选项,但您已经启用了这些选项


您还可以在使用“精确”前后尝试xdmp:plan以查看对查询计划的影响。

我可以知道,对于上述给定的XML,通过cts:element word queryxs:QnameJournaltile,===S时,您希望得到什么输出。

我可以知道通过此cts:element word queryxs:QnameJournaltile,====S,用于上述xmls。

在数据库配置中将一个字符搜索更改为true,可解决元素词查询中的问题。

在数据库配置中将一个字符搜索更改为true,可解决元素词查询中的问题。

在字段的“标记器覆盖”选项中,添加这些特殊字符@,=,,$,%,^,*作为单词选择“单词”


默认情况下,不考虑匹配这些特殊字符。您需要覆盖默认标记器以将其作为单词包含。

在字段的“标记器覆盖”选项中,添加以下特殊字符@、=、$、%、^、*作为单词选择“word”


默认情况下,不考虑匹配这些特殊字符。您需要覆盖默认标记器以将它们作为单词包含。

是的,这将为我提供正确的结果。我试过这个。但是我不能使用这个,因为我在选项中传递不区分大小写的信息,因为我需要不区分大小写的搜索。如果我们同时传递大小写不敏感和精确,将抛出一个异常-无效选项on将词干搜索设置为advanced,则问题得到解决。但是我在cts中遇到了同样的问题:元素词查询。有什么解决方案吗?很明显,您的实际需求超出了问题中提出的需求范围,因为您所说的是需要区分大小写和阻止。所以我不确定你到底需要什么。让您的字段将这些标点符号定义为符号可能会让您受益匪浅,因为在未过滤的搜索中,标点符号通常被忽略。是的,这将提供正确的结果。我试过这个。但是我不能使用这个,因为我在选项中传递不区分大小写的信息,因为我需要不区分大小写的搜索。如果我们同时传递大小写不敏感和精确,将抛出一个异常-无效选项on将词干搜索设置为advanced,则问题得到解决。但是我在cts中遇到了同样的问题:元素词查询。有什么解决方案吗?很明显,您的实际需求超出了问题中提出的需求范围,因为您所说的是需要区分大小写和阻止。所以我不确定你到底需要什么。让您的字段将这些标点符号定义为符号可能会使您受益匪浅,这样,在通常忽略标点符号的未过滤搜索中,这些标点符号可以被索引并可靠地考虑。将词干搜索设置为“高级”后,问题就解决了。但是我在cts中遇到了同样的问题:元素词查询。有解决方案吗?将词干搜索设置为“高级”时,问题就解决了。但是我在cts中遇到了同样的问题:元素词查询。任何解决方案?====S将为我提供正确的结果,该结果为空序列,因为正如我提到的,如果我们在搜索字符串中包含任何字母表,它将按预期工作。。。。。只传递特殊字符==,&@&@我是
得到一些结果,在上面的例子中得到所有的文件。。。。但是我希望是空序列…====S将给我正确的结果,这是空序列,因为正如我提到的,如果我们在搜索字符串中包含任何字母,它将按预期工作。。。。。在只传递特殊字符===,&@&@时,我得到了一些结果,在上面的例子中,我得到了所有文档。。。。但我期待的是空序列…一个字符的搜索索引将占用大量空间!!买不起。一个字符的搜索索引会占用很多空间!!我买不起。
cts:search(
  fn:doc(),
  cts:field-value-query("Sample","#@#@#@*()", ("unwildcarded")),
  "unfiltered"
)
<field xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://marklogic.com/xdmp/database">
    <field-name>Sample</field-name>
    <field-path>
        <path>/root/journalTitle</path>
        <weight>1.0</weight>
    </field-path>
    <word-lexicons/>
    <included-elements/>
    <excluded-elements/>
    <tokenizer-overrides/>
</field>
cts:search(
  fn:doc(),
  cts:field-value-query("Sample","#@#@#@*()", ("exact")),
  "unfiltered"
)