在过去的几天里,我一直在研究Lucene文档搜索程序,到目前为止,一切都进展顺利.我正在尝试使用Lucene.Net.Highlight.Highlighter该类来显示搜索结果的相关片段,但它不能始终如一地工作.大多数情况下,调用Highlighter.GetBestFragments()完全符合我的预期(显示其中包含给定查询字符串的相关文本片段),但有时它只返回一个空字符串.
我已经三次检查我的输入,我可以验证我正在使用的查询字符串是否存在于输入文本中,但是荧光笔有时会随意返回一个空字符串.这个问题是可以重现的; 返回空白片段的文档在使用相同查询时将继续返回空白片段,而具有合法片段的文档将继续具有合法片段.
但是,问题不是特定于文档的.某些查询返回文档的有效片段,其他查询返回同一文档的空字符串.问题似乎也与我的分析仪无关; 问题出现在我是否使用a StandardAnalyzer或a SnowballAnalyzer.
经过几个小时的探索,我无法在查询/文档中找到任何失败的模式而不是那些有效的模式.请记住,这是在使用完全相同的查询从Lucene索引中专门撤回的文档上发生的.这意味着Searcher能够在目标文档中找到相关的查询字符串,但Highlighter事实并非如此.
这是Lucene的一个错误吗?如果是这样,我该如何解决呢?
我的代码:
private static SimpleHTMLFormatter _formatter = new SimpleHTMLFormatter("<b>", "</b>");
private static SimpleFragmenter _fragmenter = new SimpleFragmenter(50);
...
{
using (var searcher = new IndexSearcher(analyzerInfo.Directory, false))
{
QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "Text", analyzerInfo.Analyzer);
parser.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);
//build query
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.Add(new TermQuery(new Term("PageNum", "0")), BooleanClause.Occur.MUST);
booleanQuery.Add(parser.Parse(searchQuery), BooleanClause.Occur.MUST);
Query query = booleanQuery.Rewrite(searcher.GetIndexReader());
//get results from query
ScoreDoc[] …Run Code Online (Sandbox Code Playgroud) 我有相关数据存在于两个完全独立的数据库中,我需要来自这两个数据库的信息.其中一个数据库存在于MySql服务器上,另一个数据库存在于MS SQL Server上.不要问为什么我们将相关数据存储在两个完全不同的服务器上,这是一个很长的故事.
从高级角度来看,我需要将MySqlTableA连接到SQLServerTableB,执行一些复杂的限制,并且可能会执行一些GROUP BY和计数.
我正试图找到一种方法,使这两个数据库之间的连接相当容易.我认为LINQ可以解决我的问题,但据我所知,我不能创建一个同时具有MySql和SQL Server源的上下文.我可以将两个源放在不同的上下文中 - 使用Devart的LinqConnect创建MySql上下文 - 但LINQ不允许跨上下文连接.(我尝试了这里描述的方法,但它不起作用:模拟交叉上下文连接 - LINQ/C#)
那么我的选择是什么?有没有办法有效地连接这两个不同的数据库服务器上的表(虽然LINQ或其他),或者我将不得不循环并手动加入数据?
编辑:
如前所述,我已经尝试过AsQueryable()解决方法,但我仍然遇到跨上下文异常.这是我的代码:
public static MySqlDataContext mysql = new MySqlDataContext();
public static SQLDataContext sql = new SQLDataContext();
public static void Main() {
var rows = from a in mysql.tableA
join b in GetTableBs() on a.col equals b.col
select a;
//exception gets thrown when rows is enumerated.
//InvalidOperationException: "The query contains references to items defined on a different data context."
foreach(var row …Run Code Online (Sandbox Code Playgroud) 我知道如何更改手机铃声,以及如何获取联系人,但如何为特定联系人设置铃声?
那么,如何使用方法:ContactsContract.Contacts.CUSTOM_RINGTONE?
我试过这样的:
Uri contactUri = ContactsContract.Contacts.CONTENT_URI;
String[] PROJECTION = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
};
String SELECTION = ContactsContract.Contacts.HAS_PHONE_NUMBER + "='1'";
Cursor contacts = managedQuery(contactUri, PROJECTION, SELECTION, null, null );
while (contacts.moveToNext())
{
String Name=contacts.getString(contacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
}
String str1 = contacts.getString(contacts.getColumnIndexOrThrow("_id"));
Uri localUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, str1);
ContentValues localContentValues = new ContentValues();
localContentValues.put(ContactsContract.Contacts.CUSTOM_RINGTONE,
f.getAbsolutePath()+"/Adveture.ogg");
MainActivity.this.getContentResolver().update(localUri, localContentValues, null, null);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
为了拓宽我的技能,我正在尝试学习如何重写表达式。
目标:给定一个表达式,我想List.Contains()用对我自己的静态方法的调用来替换实例InList。例如,以下两个表达式应该是等价的:
Expression<Func<Foo,bool>> expr1 = myRewriter.Rewrite(foo => fooList.Contains(foo));
Expression<Func<Foo,bool>> expr2 = foo => InList(foo, fooList);
Run Code Online (Sandbox Code Playgroud)
我的尝试:我了解到使用自定义 ExpressionVisitor是基于现有表达式创建新表达式的最佳方式。但是,我一直无法构建一个MethodCallExpression实际调用我的方法的新方法。这是我尝试过的:
public class InListRewriter<T> : ExpressionVisitor
{
public static bool InList(T target, List<T> source)
{
// this is my target method
return true;
}
public Expression<Func<T, bool>> Rewrite(Expression<Func<T, bool>> expression)
{
return Visit(expression) as Expression<Func<T,bool>>;
}
protected override Expression VisitMethodCall(MethodCallExpression node)
{
// Only rewrite List.Contains()
if (!node.Method.Name.Equals("Contains", StringComparison.InvariantCultureIgnoreCase))
return base.VisitMethodCall(node);
// Extract parameters …Run Code Online (Sandbox Code Playgroud) 简介:我将PredicateBuilder与Or()几个表达式一起使用,然后将该组合表达式发送到OrmLite的Select()方法.但是,生成的SQL有一个WHERE带有如此多嵌套括号的子句,SQL Server会抛出错误.我该怎么做才能解决这个问题?
细节:我有一个Foo有两列的表,Bar和Baz.如果我有一组Bar/Baz值并且我想找到所有匹配的行,那么我可能(例如)发出以下SQL:
SELECT * FROM Foo WHERE (Bar=1 AND Baz=1) OR (Bar=2 AND Baz=3) OR ...
Run Code Online (Sandbox Code Playgroud)
由于我正在使用OrmLite,我正在使用PredicateBuilder为我生成where子句:
var predicate = PredicateBuilder.False<Foo>();
foreach (var nextFoo in fooList)
predicate = predicate.Or(foo => nextFoo.Bar == foo.Bar &&
nextFoo.Baz == foo.Baz);
Db.Select(predicate);
Run Code Online (Sandbox Code Playgroud)
如果我在列表中使用3个Foos执行此操作,则生成的SQL看起来像这样(为了简洁而清理,但故意留在一行上以表达观点):
SELECT Bar, Baz FROM Foo WHERE ((((1=0) OR ((1=Bar) AND (1=Baz))) OR ((2=Bar) AND …Run Code Online (Sandbox Code Playgroud) 我创建中,我们匹配系统orders来staff.从概念上讲,a order是要求人做某项工作,而a staff是能够做这项工作的人.一个order可以有一个或一个以上requirements(即对谁可以做的工作限制),并且staff可以有一个更详细requirements(即资格做的工作).
我试图创建一个暗号查询会给我所有staff有所有的的requirement由给定的上市小号order.换句话说,我试图找到与给定节点相关的staff每个requirement节点相关的所有order节点.我的问题是:如何创建一个cypher查询来建模该业务逻辑?
例如,请考虑以下示例数据:
查看orderId:1节点.它requires与两个节点有关系,标记为RN和ER IV.换句话说,#1号令要求任何申请人具有RN资格和ER IV资格.事实上,工作人员Evan(staffId:1)具有这两种资格,因此他应该能够申请这项工作.蒂姆的工作人员有其中一项要求,但不是两者,所以他不应该申请这项工作.另外,orderId:2只有一个要求,Evan和Tim都有,所以他们都应该能够申请那份工作.
所以从本质上说,如果我从订单#1开始,我会想要只回到Evan.如果我从订单#2开始,我会想要回到Evan和Tim*.
以下查询是中途的一半.它将为我提供从给定订单到工作人员一次一个要求的所有独特路径.但是,它不会检查是否满足每个需求路径(这意味着它目前仅适用于只有一个需求的订单):
start o=node(2)
match o-[:requires]->req<-[:hasRequirement]-s
return o, req, s;
Run Code Online (Sandbox Code Playgroud)
那么我的选择是什么?我可以以某种方式检查是否存在未知数量的匹配关系?或者我需要以不同的方式建模我的数据吗?
*编辑:我在设置样本数据时犯了一个错误.蒂姆本应与RN联系,以便他有资格获得第2号订单.
我有一个字符串(带空格),我想从中分隔最后一个单词.例如:
"Steve Jobs" => Jobs
"Stack OverFlow Question" => Questions
Run Code Online (Sandbox Code Playgroud)
PL/SQL或SQL中是否有任何功能,以便我能够得到结果Jobs并Question分离出来?