小编ean*_*533的帖子

Lucene Hightlighter有时会莫名其妙地返回空白片段

在过去的几天里,我一直在研究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)

c# lucene.net

6
推荐指数
1
解决办法
1549
查看次数

LINQ:加入MySql和SQL Server表

我有相关数据存在于两个完全独立的数据库中,我需要来自这两个数据库的信息.其中一个数据库存在于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)

c# mysql linq join c#-4.0

5
推荐指数
1
解决办法
3001
查看次数

设置联系人自定义铃声,怎么样?

我知道如何更改手机铃声,以及如何获取联系人,但如何为特定联系人设置铃声?

那么,如何使用方法: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)

但它不起作用.

mp3 android ogg contacts ringtone

5
推荐指数
1
解决办法
5739
查看次数

重写表达式以用自定义方法替换 List.Contains

为了拓宽我的技能,我正在尝试学习如何重写表达式。

目标:给定一个表达式,我想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)

c# expression

4
推荐指数
1
解决办法
1063
查看次数

PredicateBuilder嵌套OR子句,导致大型谓词的嵌套问题太深

简介:我将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)

c# predicatebuilder ormlite-servicestack

4
推荐指数
1
解决办法
1075
查看次数

查找具有所有公共中介的节点

我创建中,我们匹配系统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号订单.

neo4j cypher

3
推荐指数
1
解决办法
1400
查看次数

在SQL中从String中读取间距

我有一个字符串(带空格),我想从中分隔最后一个单词.例如:

"Steve Jobs" => Jobs
"Stack OverFlow Question" => Questions
Run Code Online (Sandbox Code Playgroud)

PL/SQL或SQL中是否有任何功能,以便我能够得到结果Jobs并Question分离出来?

sql oracle plsql plsqldeveloper

1
推荐指数
1
解决办法
151
查看次数