gpt4 book ai didi

java - 使用 eXist-db 进行不区分大小写的搜索

转载 作者:行者123 更新时间:2023-11-30 09:51:41 25 4
gpt4 key购买 nike

我正在处理客户发布的最终细化,这需要我进行不区分大小写的查询。我将基本上介绍这个简单程序的工作原理。

首先,在我的 Java 类中,我做了一个相当简单的网页解析:

title=(String)results.get("title");
doc = docBuilder.parse("http://" + server + ":" + port + "/exist/rest/db/wb/xql/media_lookup.xql?" + "&title=" + title);

此 Java 语句引用存储在本地主机上的 XQuery 文件“media_lookup.xql”,我们传递的唯一参数是字符串“title”。

其次,让我们看一下那个 XQuery 文件:

$title := request:get-parameter('title',""),

$mediaNodes := doc('/db/wb/portfolio/media_data.xml'),
$query := $mediaNodes//media[contains(title,$title)],

然后它将评估该查询。这个 XQuery 将获取从我们的 Java 类传递的“title”参数,并查询存储在数据库中的“media_data”xml 文件,其中包含一堆带有“title”元素节点的媒体节点。如您所料,这个简单的查询将只匹配那些“title”元素包含字符串“title”值的子字符串的媒体节点。因此,如果我们的“标题”是“Chi”,它将返回标题可能是“Chicago”或“Chicken”的媒体节点。

客户端发布的优化要求是不区分大小写。非常直观的方法是通过在其中使用小写函数来修改 XQuery 语句,例如:

$query := $mediaNodes//media[contains(lower-case(title/text(),lower-case($title))],

然而,问题来了:这个修改后的查询将使我的机器运行到内存溢出。由于我的“media_data.xml”非常庞大并且包含数以百万计的媒体节点,我假设 lower-case() 函数将在每个条目上运行,从而导致机器崩溃。

我和一些有经验的 XQuery 程序员谈过,他们认为我应该使用索引来解决这个问题,我一定会研究的。但在此之前,我只是在这里发布这个问题以获得其他想法或任何建议,你认为任何其他方式可能有帮助吗?例如,我可以调整 Java 解析语句来实现不区分大小写吗?因为我想我看到有些人使用“包含”进行字符串连接。在将其传递给服务器之前使用 Java。

欢迎任何想法或帮助。

最佳答案

The refinement request posted by the client is that there should be NO case-sensitivity. The very intuitive way is to modify the XQuery statement by using a lower-case function in it, like:

$query := $mediaNodes//media
[contains(lower-case(title/text(),lower-case($title))],

However, the question comes: this modified query will run my machine into memory overflow. Since my "media_data.xml" is quite huge and contains thousands of millions of media nodes, I assume the lower-case() function will run on each of the entries, thus causing the machine to crash.

这种担心是没有道理的。

XPath 的任何合理实现都为其功能使用自动内存。这意味着评估特定谓词所需的内存(包括 lower-case() 的结果)在评估后立即释放(在没有垃圾收集的语言中)或未被引用并准备好进行垃圾收集谓词。

关于java - 使用 eXist-db 进行不区分大小写的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4577847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com