- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的 mongodb 集合 page_link_titles 中的一个文档的示例:
{
"_id" : ObjectId("553b11f30b81511d64152416"),
"id" : 36470831,
"linkTitles" : [
"Syrian civil war",
"Damascus",
"Geographic coordinate system",
"Bashar al-Assad",
"Al Jazeera English",
"Free Syrian Army",
...
"February 2012 Aleppo bombings",
"2012 Deir ez-Zor bombing",
"Aleppo University bombings"
]
}
我想找到linkTitles
中文本的所有文档包含类似 '%term1%'
的短语或'%term2%'
或(等等)。 term1 和 term2 两侧必须有换行符。例如查看 "Syrian civil war"
。如果term1 = "war"
我希望此文档作为查询结果返回,但是如果 term1 = "yria"
这是本文档中单词的一部分,不应返回。
这是我的java代码:
for (String term : segment.terms) {
DBObject clause1 = new BasicDBObject("linkTitles",
java.util.regex.Pattern.compile("\\b"
+ stprocess.singularize(term) + "\\b"));
or.add(clause1);
}
DBObject mongoQuery = new BasicDBObject("$or", or);
DBCursor cursor = pageLinks.find(mongoQuery);
在线:java.util.regex.Pattern.compile("\\b"+ stprocess.singularize(term) + "\\b"));
我只假设换行。我不知道应该如何编写正则表达式来考虑我的所有条件:line break , case insensitive , like .
有什么想法吗?
最佳答案
可以使用正则表达式来实现您想要的效果。您还可以使用单个正则表达式,而不是使用 $or
。
我使用 shell 作为一个简单示例,并希望搜索 boxer
或 cat
。首先插入测试数据:
db.test.drop()
db.test.insert([
{ "a" : "Boxer One" },
{ "a" : "A boxer dog" },
{ "a" : "A box shouldn't match" },
{ "a" : "should match BOXER" },
{ "a" : "wont match as this it the plural BOXERs" },
{ "a" : "also match on cat" }])
使用以下正则表达式,我们可以搜索所有术语:
/(^|\b)(boxer|cat)(\b|$)/i
+---+ +-------+ +---+
| | |
| | |
Start or space | Space or end
|
Search terms
然后像这样查找:
db.test.find({a: /(^|\b)(boxer|cat)(\b|$)/i})
该查询将返回以下结果:
{ "_id" : ObjectId("555f18eee7b6d1b7e622de36"), "a" : "Boxer One" }
{ "_id" : ObjectId("555f18eee7b6d1b7e622de37"), "a" : "A boxer dog" }
{ "_id" : ObjectId("555f18eee7b6d1b7e622de39"), "a" : "should match BOXER" }
{ "_id" : ObjectId("555f18eee7b6d1b7e622de3b"), "a" : "also match on cat" }
在 Java 中,您可以像这样构建此查询:
StringBuilder singularizedTerms = new StringBuilder();
for (String term : terms) {
singularizedTerms.append("|").append(stprocess.singularize(term));
}
String regexPattern = format("(^|\\b)(%s)(\\b|$)", singularizedTerms.substring(1));
Pattern regex = Pattern.compile(regexPattern, Pattern.CASE_INSENSITIVE);
这种方法有两个问题。
会很慢它无法使用索引,因此将对集合进行全面扫描,如果您有 1000 万个文档,它将检查每个文档!
它不会匹配复数例如,它不会匹配包含“BOXERs”的文档,因为我们的正则表达式明确不允许部分匹配!
Text indexes支持这一点。使用索引将使操作更快以及匹配多个或单个值,例如:
db.test.createIndex( { a: "text" } )
db.test.find({ $text: { $search: "boxer cat"}})
{ "_id" : ObjectId("555f18eee7b6d1b7e622de3b"), "a" : "also match on cat" }
{ "_id" : ObjectId("555f18eee7b6d1b7e622de3a"), "a" : "wont match as this it the plural BOXERs" }
{ "_id" : ObjectId("555f18eee7b6d1b7e622de36"), "a" : "Boxer One" }
{ "_id" : ObjectId("555f18eee7b6d1b7e622de37"), "a" : "A boxer dog" }
{ "_id" : ObjectId("555f18eee7b6d1b7e622de39"), "a" : "should match BOXER" }
关于java - 或者同时使用 "like"和 "line break"和 "case insensitive"从 java 查询 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30384539/
所以我正在使用 Zend_Search_Lucene 为网站制作一个搜索引擎 我目前正在使用 Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_Case
在 Sitecore 中,我尝试在线路管理器中创建分段列表。但是,当我选择条件时,我对“等于”、“不区分大小写等于”和“不不区分大小写等于”感到非常困惑? 谁能给我解释一下其中的区别吗? 谢谢! 最佳
我在“utf8 -- UTF-8 Unicode”中有一个模式作为字符集和“utf8_spanish_ci”的排序规则。 所有内部表都是 InnoDB,具有与上述相同的字符集和排序规则。 问题来了:
Kibana 有没有办法只为小写和大写匹配显示一次数据? 例如,假设我需要一个异常饼图,我不希望“BusinessException”和“businessexception”都被显示并被认为是不同的。
在下面的例子中, typedef CMap MapNameAndId; MapNameAndId["Dummy"] = 1; int nId = 0; if(MapNameAndId.Lookup("
似乎当我更改一个 mysql 表(在 utf-8 表/列上)唯一时,它返回重复输入错误。 例子: ALTER TABLE name ADD UNIQUE(name) 错误: Duplicate ent
我正在尝试创建一个连接到 postgresql 数据库的 TypeORM 查询构建器,以获取数据库中的所有唯一名称。我的查询看起来像这样 names = await this._context.man
我需要替换未知文本中的单词(单词的一部分)。 “替换”工作正常,但区分大小写。如何以不区分大小写的方式替换? 非常感谢! 最佳答案 您可以设置标志 i - 忽略大小写选项。引用:http://www.
我的要求是根据字符串在数据库中进行搜索。 该特定字符串可能以大写形式存储在数据库中。 所以,我将不得不通过 HQL 进行不区分大小写的搜索 我目前的 HQL 是 String query = "fro
我生成了一个可提取且不敏感的派生 key 。我想将其从 token 中导出并查看它的再见。我该怎么做? 最佳答案 您应该使用 C_GetAttributeValue() 函数读取 key 对象的 CK
这个问题已经有答案了: Cloud Firestore Case Insensitive Sorting Using Query (3 个回答) 已关闭2 年前。 基本上,我正在 Firestore
我生成了一个可提取且不敏感的派生 key 。我想将其从 token 中导出并查看它的再见。我该怎么做? 最佳答案 您应该使用 C_GetAttributeValue() 函数读取 key 对象的 CK
$('.s').keyup(function(e) { if (!/[A-Za-z0-9]/.test(String.fromCharCode(e.which))) { ret
我有这个不区分大小写的自定义选择器: jQuery.expr[':'].Contains = function(a,i,m) { var text = jQuery(a).text().toU
我知道我可以使用不区分大小写的方法,如下所示: var name = "test A/c"; {name: new RegExp('^'+name+'$', "i")} 现在我想转义上面表达式中的反斜
在 Microsoft SQL Server 中,可以指定“不区分重音”的排序规则(对于数据库、表或列),这意味着可以进行类似的查询 SELECT * FROM users WHERE name LI
我知道答案很简单,但我要发疯了。我想我已经尝试了所有可用的解决方案。我们开始吧... 我有一个字符集latin1的数据库。是的,我应该以 utf8 格式保存它,但我有几个正在运行的项目,所以我不想弄乱
抱歉,我无法从 Google 提供的任何解决方案中找到可行的解决方案(某些网站上的一些“食谱”非常接近,但太老了,我还没有找不到能给我想要的结果的东西。 我正在重命名文件,所以我有一个函数可以输出文件
我有一个 df,我想按标签删除一列,但不区分大小写。注意:我不想更改我的 df 中的任何内容,所以我想避免使用“str.lower”。 这是我的 df: print df Name Unweighte
我有这个示例代码... Result = session.QueryOver().WhereRestrictionOn(x => x.FirstName) .IsIn(ListOfFirstNames
我是一名优秀的程序员,十分优秀!