小编Win*_*ett的帖子

用于标记,云和搜索的最佳数据架构(如StackOverflow)?

我很想知道Stack Overflow的标记和搜索是如何构建的,因为它看起来效果很好.

如果我想要执行以下所有操作,那么什么是良好的数据库/搜索模型:

  1. 在各种实体上存储标签,(如何规范化?即实体,标签和Entity_Tag表?)
    • 搜索具有特定标签的项目
    • 构建适用于特定搜索结果集的所有标记的标记云
    • 如何在搜索结果中显示每个项目的标签列表?

也许以标准化的形式存储标签是有意义的,但也可以作为空格分隔的字符串用于#2,#4和#3的目的.思考?

我听说它说Stack Overflow使用Lucene进行搜索.真的吗?我听过几个关于SQL优化的播客,但没有关于Lucene的内容.如果他们确实使用Lucene,我想知道有多少搜索结果来自Lucene,以及"钻取"标签云是否来自Lucene.

tags database-design full-text-search tag-cloud

38
推荐指数
2
解决办法
6163
查看次数

如何让Lucene QueryParser更宽容?

我正在使用Lucene.net,但我正在为.NET和Java版本标记这个问题,因为API是相同的,我希望在这两个平台上都有解决方案.

我相信其他人已经解决了这个问题,但我找不到任何好的讨论或例子.

默认情况下,Lucene对查询语法非常挑剔.例如,我刚刚收到以下错误:

[ParseException: Cannot parse 'hi there!': Encountered "<EOF>" at line 1, column 9.
Was expecting one of:
    "(" ...
    "*" ...
    <QUOTED> ...
    <TERM> ...
    <PREFIXTERM> ...
    <WILDTERM> ...
    "[" ...
    "{" ...
    <NUMBER> ...
    ]
   Lucene.Net.QueryParsers.QueryParser.Parse(String query) +239
Run Code Online (Sandbox Code Playgroud)

处理来自用户的查询时,阻止ParseExceptions的最佳方法是什么?在我看来,最有用的搜索界面是始终执行查询的界面,即使它可能是错误的查询.

似乎有一些可能的,互补的策略:

  • 在将查询发送到QueryProcessor之前"清理"查询
  • 优雅地处理异常
    • 向用户显示智能错误消息
    • 也许执行一个更简单的查询,省去错误的位

关于如何做这些策略,我真的没有什么好主意.还有其他人解决了这个问题吗?有什么"简单"或"优雅"的解析器我不知道吗?

lucene lucene.net

30
推荐指数
3
解决办法
2万
查看次数

为什么使用flags + bitmasks而不是一系列布尔?

鉴于我有一个可能处于一个或多个真/假状态的对象的情况,我总是有点模糊为什么程序员经常使用标志+位掩码而不是仅仅使用几个布尔值.

它遍布.NET框架.不确定这是否是最好的示例,但.NET框架具有以下内容:

public enum AnchorStyles
{
    None = 0,
    Top = 1,
    Bottom = 2,
    Left = 4,
    Right = 8
}
Run Code Online (Sandbox Code Playgroud)

因此,给定锚样式,我们可以使用位掩码来确定选择哪个状态.但是,似乎您可以使用AnchorStyle类/结构来完成相同的操作,其中为每个可能的值或单个枚举值的数组定义了bool属性.

当然,我的问题的主要原因是我想知道我是否应该使用自己的代码进行类似的练习.

那么,为什么要用这种方法呢?

  • 减少内存消耗?(它似乎不会消耗少于bools的数组/结构)
  • 比结构或数组更好的堆栈/堆性能?
  • 更快的比较操作?更快的增值/删除?
  • 编写它的开发人员更方便吗?

c# enums flags

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

具有属性继承和事件冒泡的分层对象模型?

我正在编写一个基于文档的客户端应用程序,我需要一个类似DOMWPF非可视模型:

  • 一棵由元素组成的
  • 可以接受无限数量的自定义属性
    • 获取/设置任何CLR类型,包括集合.
    • 可以从父级继承它们的值
    • 可以从祖先继承其默认值
    • 可以从其他属性,祖先或后代派生/计算
    • 支持事件冒泡/隧道
    • 将有一组核心属性,但其他插件可能会添加自己的属性甚至创建自定义文档
  • 支持拥有文档的完整检查,以便以XML格式保存树和属性.

我意识到这是一个很高的订单,但我真的希望有一些东西可以帮助我开始.不幸的是,WPF DependencyObjects过于封闭,专有,并且与WPF耦合,可以用作文档模型.我的需求也与HTML DOM非常相似,但我找不到任何可以与HTML分离或移植到.NET的干净DOM实现.

我目前的平台是.NET/C#但是如果有人知道任何可能对灵感或嵌入有用的东西,无论平台如何,我都很想知道.

c# java client dom model

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

什么加载项/工作台框架是Eclipse RCP的最佳.NET替代方案?

我正在寻找一个基于插件的应用程序框架,它与Eclipse插件框架相当,我的简单思想包括:

  1. 核心插件管理框架(Equinox/OSGI),它提供声明扩展端点,然后发现和加载为这些端点提供服务的插件的功能.(这比依赖注入不同,但不可否认的区别很微妙-配置是高度分散式,也有版本的关注,它可能涉及一个在线插件库,最重要的对我来说,它应该很容易为用户增加插件,无需了解底层架构/配置文件)
  2. 多层插件,提供基本工作台shell,包括并发支持,命令,首选项表,菜单,工具栏,键绑定等.

这只是RCP的表面,它本身就是你的应用程序的基础,你可以通过编写/组装更多的插件来构建它.


这是我在过去几天从互联网上收集的内容......

据我所知,.NET世界中没有任何东西可以远程接近Eclipse RCP for Java的健壮性和成熟度,但有几个竞争者可以很好地完成#1或#2.

(我还应该提到我还没有对WinForms vs WPF做出最终决定,所以我也试图了解任何候选框架中的UI耦合程度.我也想知道平台耦合和源代码许可)

我必须说开源的东西通常记录较少但更容易理解,而MS的东西通常有更多的文档,但是不太容易理解,因此对于许多MS技术,我不知道他们实际上做了什么. ,在实际意义上.

这些是我找到的库:

SharpDevelop的

我看到的第一件事是SharpDevelop,它以基本的方式同时执行#1和#2(对SharpDevelop没有任何侮辱,这是令人钦佩的 - 我的意思是比Eclipse RCP 更基本).但是,SharpDevelop不仅仅是一个框架,它还有一些基本的假设和局限(即与WinForms有些结合).仍有一些关于CodeProject的文章解释了如何将它作为应用程序的基础.

System.Addins

似乎System.Addins旨在提供一个强大的加载项加载框架,其中包含一些复杂的选项,用于加载具有不同信任级别的程序集,甚至可以运行进程外的程序集.它似乎主要是基于代码的,而且代码很重,有许多程序集用于隔离版本问题.使用Guidance Automation生成大量代码.

到目前为止,我还没有发现很多System.AddIns文章,这些文章说明了它如何用于构建像Eclipse RCP这样的东西,很多人似乎都在为它的复杂性绞尽脑汁.

Mono.Addins

似乎Mono.Addins受System.Addins,SharpDevelop和MonoDevelop的影响.它似乎提供了System.Addins的基础知识,插件加载的选项较少,但更简单,基于属性的注册,XML清单和在线插件存储库的基础结构.

它有一个非常好的常见问题解答和文档,以及一组相当强大的例子,真正有助于描绘如何开发类似SharpDevelop或Eclipse的架构.这些示例使用GTK作为UI,但框架本身并未与GTK耦合.所以它看起来很好地做#1(加载项加载)并指向#2(工作台框架).似乎Mono.Addins是从MonoDevelop派生的,但我还没有看到MonoDevelop是否提供了一个很好的核心工作台框架.

托管可扩展性框架

这是每个人现在都在谈论的内容,而且它正在慢慢变得清晰起来,但即使在阅读SO上的几个帖子后,我仍然非常模糊.官方的说法是它可以与System.Addins"并存".但是,它没有引用它,它似乎重现了它的一些功能.在我看来,它是System.Addins的一个更简单,更易于访问的替代方案.

它看起来更像是Mono.Addins,因为它提供了基于属性的布线.它提供了可以基于属性或基于目录的"目录".它似乎不提供任何XML或基于清单的连线.到目前为止,我还没有找到很多文档,并且这些示例似乎有点"神奇",更像是基于属性的DI,尽管有人澄清MEF不是DI容器.

它的许可证刚刚开放,但确实引用了WindowsBase - 不确定这是否意味着它与Windows相连.

雅典卫城

我不确定这是什么.它是MEF,还是还在发生什么?

复合应用程序块

WPF和Winforms Composite Application块似乎提供了更多的工作台框架.我对这些经验很少,但他们似乎依赖于指导自动化显然与UI层相结合.有一些将MEF与这些应用程序块组合在一起的例子.


我已尽力在这里回答我自己的问题,但我真的只是表面上看,而且我没有任何这些框架的经验.希望你们中的一些人可以添加更多关于你们经历过的框架的细节.如果我们最终得到某种比较矩阵会很棒.

.net eclipse plugins extensibility add-in

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

如何从剪贴板中获取正确编码的HTML?

有没有人注意到如果你从剪贴板中检索HTML,它会得到错误的编码并注入奇怪的字符?

例如,执行如下命令:

string s = (string) Clipboard.GetData(DataFormats.Html)
Run Code Online (Sandbox Code Playgroud)

结果如下:

<FONT size=-2>  <A href="/advanced_search?hl=en">Advanced 
Search</A><BR>  <A href="/preferences?hl=en">Preferences</A><BR>  <A 
href="/language_tools?hl=en">Language 
Tools</A></FONT>
Run Code Online (Sandbox Code Playgroud)

不确定MarkDown将如何处理它,但上面的结果标记中有奇怪的字符.

似乎该错误与.NET框架有关.您认为从剪贴板获取正确编码的HTML的最佳方法是什么?

c# clipboard encoding winforms

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

__DoPostback在执行部分回发时回发禁用控件的值

我有一个表单,为了隔离问题,它有大约十几个纯HTML复选框(不是WebControls),所有这些都被禁用.他们在里面UpdatePanel.

我有一个电话链接

__doPostBack('a-control','my-custom-argument');

根据我提供的第一个参数,页面可以执行完整postback或部分参数.

当我完成时postback,在帖子中没有提交任何复选框值(因为它们被禁用).这是正常的,因而也是期望的行为.

但是,当它执行部分操作时postback,脚本会从我的复选框中收集所有值并提交它们,而不指示哪些值被禁用,这会破坏我的代码.

这很烦人,我希望它表现得一致.反正有没有告诉.NET javascript处理程序以世界其他地方的方式工作,而不是 禁用的 HTML表单元素postback的值?

javascript asp.net ajax webforms asp.net-ajax

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