Indexing 具有特殊字符的字段值查询和返回意外结果的未筛选搜索?
当传递任何特殊字符@、=、$、%、^、*时,字段值查询将给出意外结果 请查找我在ML中插入的4个示例文档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
<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"
)