我意识到有很多关于全文搜索和实体框架的问题,但我希望这个问题有点不同.
我正在使用Entity Framework,Code First,需要进行全文搜索.当我需要执行全文搜索时,我通常还会有其他条件/限制 - 例如跳过前500行,或过滤其他列等.
我看到这是使用表值函数处理的 - 请参阅http://sqlblogcasts.com/blogs/simons/archive/2008/12/18/LINQ-to-SQL---Enabling-Fulltext-searching.aspx.这似乎是正确的想法.
不幸的是,在实体框架5.0之前不支持表值函数(我认为,即使这样,它们也不支持Code First).
我真正的问题是,对于实体框架4.3和实体框架5.0,最佳处理方式的建议是什么.但具体来说:
除了动态SQL(System.Data.Entity.DbSet.SqlQuery例如,通过),Entity Framework 4.3是否有可用的选项?
如果我升级到Entity Framework 5.0,有没有办法可以首先使用表值函数和代码?
谢谢,埃里克
我正在使用实体框架并建模多对多关系.
我使用流畅的API创建了两个实体之间的关系(假设用户和组):
this.HasMany(t => t.Users)
.WithMany(t => t.Groups)
.Map(
m =>
{
m.ToTable("GroupMembers");
m.MapLeftKey("Group_Id");
m.MapRightKey("User_Id");
});
Run Code Online (Sandbox Code Playgroud)
这很好用,但我也希望能够直接引用GroupMembers表.要做到这一点,我有类似的东西:
[Table("GroupMembers")]
public class GroupMember
{
#region Properties
/// <summary>
/// Gets or sets the group.
/// </summary>
public virtual Group Group { get; set; }
/// <summary>
/// Gets or sets the Id of rht group.
/// </summary>
[Key]
[Column("Group_Id", Order = 1)]
public int GroupId { get; set; }
/// <summary>
/// Gets or sets the user.
/// </summary>
public virtual User …Run Code Online (Sandbox Code Playgroud) 我的同义词存储在数据库中,当在数据库中更改同义词时,我想更新索引中的任何值,这些值可能会因同义词更改而更改.
我可以想到有两个部分.一,找出要重新索引的文件.二,弄清楚如何告诉ElasticSearch同义词已经改变.我正在努力争取第二个 - 告诉ElasticSearch同义词已经改变了.
有一个类似的问题已被提出 - 请参阅更改动态弹性搜索同义词 - 但从阅读该问题的答案,我无法弄清楚我需要什么.
目前,我的配置文件如下所示:
index :
analysis :
analyzer :
myanalyzer :
filter: [standard, mysynonymfilter]
filter :
mysynonymfilter :
type : synonym
synonyms : synonyms.txt
ignore_case : false
expand : true
format : solr
Run Code Online (Sandbox Code Playgroud)
我的想法是做类似以下的事情:
curl -XPUT 'http://127.0.0.1:9200/foo/_settings' -d '
{
"filter" : {
"synonym" : {
"type" : "mysynonymfilter",
"synonyms" : [
"cosmos, universe"
]
}
}
}
'
Run Code Online (Sandbox Code Playgroud)
但这似乎没有做我想要的.也就是说,据我所知,索引设置不会更新.
我正在尝试做什么?如果是这样,任何想法我做错了什么?
此外,我相信我可以通过更新同义词文件(如果我必须使用文件)来实现这一点,但这有点复杂,我想避免的事情.
谢谢你的帮助,埃里克
我有一种情况,我想保留已处理的所有MSMQ消息的历史记录或日志(至少在一段时间内).我意识到我可以使用计算机管理 - >服务和应用程序 - >消息队列来查看当前队列.但我想要的是已经处理过的消息的历史或日志.
到目前为止,我还没有找到一种非编程方式来做到这一点.理想情况下,设置MSMQ属性非常简单,以便所有消息都记录到文件甚至Windows日志中.
有谁知道这个(或类似的东西)是否可能?
我正在构建一个将在Azure上运行工作流的应用程序.
我已经看到构建演示文稿 使用Workflow构建应用程序和Azure - BUILD 2011,它讨论了当前的功能,以及未来可能实现的功能.讨论的一件事是称为"Azure工作流服务",据我所知,计划在2012年进行预览.但是,我还没有找到更多有关它的信息.
此外,Windows Azure AppFabric中还有一个早期演示文稿Workflow,其中讨论了有关Azure中工作流的更多信息,重点介绍了Windows Azure AppFabric CTP.本演示文稿中讨论了许多很酷的功能,但我不确定这些功能是否可用,如果没有,可用时.
所以有两个问题:
如果我今天需要构建应用程序,那么在Azure上实现工作流的建议方法是什么?
如果应用程序不需要在一年之后完成,那么在Azure上实现工作流的建议方法是什么?
运行使用slop和事实向量荧光笔的查询时,我遇到性能问题.有趣的是,当使用普通荧光笔执行相同的查询时,性能问题就消失了,我不确定为什么会这样.
这是搜索字段的元数据:
contents: {
store: true
search_analyzer: mySearchAnalyzer
term_vector: with_positions_offsets
type: string
}
Run Code Online (Sandbox Code Playgroud)
以下使用事实向量荧光笔的查询需要60秒以上:
{
"size": 500,
"query": {
"query_string": {
"query": "\"CATERPILLAR FINANCIAL SERVICES ASIA PTE LTD\"~5",
"fields": [
"contents"
],
"default_operator": "and",
}
},
"highlight": {
"fields": {
"contents": {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我将查询更改为使用普通分析器,则只需几毫秒:
{
"size": 500,
"query": {
"query_string": {
"query": "\"CATERPILLAR FINANCIAL SERVICES ASIA PTE LTD\"~5",
"fields": [
"contents"
],
"default_operator": "and",
}
},
"highlight": {
"fields": {
"contents": {"type" : "plain"}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经查看了荧光笔的不同选项(例如fragment_size,fragment_offset,phrase_limit),但是没有什么可以立即显示为可以设置以提高性能. …
我正在使用ios语音识别,只要有足够的上下文,它就会很好.我正在使用语音识别仅用于数字输入并且看到问题.例如,使用单个数字(例如2 - ,或8 - ate); 没有足够的背景.或者甚至有两位数字(80有时被翻译为白痴).我想向语音识别器表明输入将是数字.例如,如果输入是"数字2",那么语音识别器就能完成出色的工作.
我已经玩了一些提示--SFSpeechRecognitionTaskHint(未指定,听写,搜索,确认) - 但这些模式都不适合数字输入.
所以,问题是:
另请注意,我希望这也适用于许多不同的语言(不仅仅是英语).
谢谢你的帮助,埃里克
我意识到这个类似的问题已被问过几次,我在这些问题中尝试过这些建议而没有成功.
我正在使用实体框架(4.3)并针对SQL Azure运行(在联合数据库上).我希望能够记录实体框架生成的SQL.
我已经使用了实体分析器框架,虽然这在开发过程中很有用,但我不确定它在生产过程中是否有用.
我无法使用SQL事件探查器,因为这是一个SQL Azure数据库.
我已尝试使用EFTracingProvider并按照此处的步骤操作.不幸的是,当我尝试执行我的第一个命令(使用适当的联合)时,我得到一个异常,表明"不支持指定的方法".
生成错误的代码如下:
public MyContext(int tenantId)
: base(CreateTracingConnection("TheDb"), true)
{
const string FederationCmdText =
"USE FEDERATION TenantFederation(CustomerId = {0}) WITH RESET, FILTERING=ON";
((IObjectContextAdapter)this).ObjectContext.EnableTracing();
((IObjectContextAdapter)this).ObjectContext.Connection.Open();
// This is the line which throws the exception
this.Database.ExecuteSqlCommand(string.Format(FederationCmdText, tenantId));
}
Run Code Online (Sandbox Code Playgroud)
这是例外:
Specified method is not supported.
at EFProviderWrapperToolkit.DbConnectionWrapper.CreateDbCommand()
at System.Data.Common.DbConnection.CreateCommand()
...
Run Code Online (Sandbox Code Playgroud)
所以这是我的问题:
谢谢你的帮助,埃里克
我正在使用带有Nest的ElasticSearch(0.9.16)并且有一些查询需要超过60秒.发生这种情况时,我收到以下错误:
var setting = new ConnectionSettings(new Uri(searchUrl)).SetTimeout(200000);
Run Code Online (Sandbox Code Playgroud)
虽然我担心查询花了这么长时间,但对于这个问题,如果有办法增加超时,我只是感兴趣.我一直无法找到增加超时的方法.
注意,我确实看到了几个可以设置超时的地方,但这些不是正确的地方:
searchdescriptor.Timeout("120000");
Run Code Online (Sandbox Code Playgroud)
要么
var setting = new ConnectionSettings(new Uri(searchUrl)).SetTimeout(200000);
Run Code Online (Sandbox Code Playgroud)
第一个设置连接超时,第二个设置ElasticSearch超时,这两个都没有帮助.
谢谢,埃里克
我有一个UDT列表,如:
create table MyTable
{
...
stuff list<frozen<MyType>>,
...
}
Run Code Online (Sandbox Code Playgroud)
在我的客户端代码中,我想将一个元素附加到"stuff".理想情况下,我想做以下(或类似的事情):
this.Mapper<MyTable>("SET stuff = stuff + [?] WHERE id = ?", mytype, id);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这失败并出现以下错误:
Invalid list literal for stuff: bind variables are not supported inside collection literals
Run Code Online (Sandbox Code Playgroud)
我可以通过将mytype转换为json来实现这一点,例如:
var stuffAsJson = stuff.ToJson();
var update = string.Format("SET stuff = stuff + [{0}] WHERE id = ?", commentAsJson);
this.Mapper.Update<MyTable>(update, stuffAsJson, id);
Run Code Online (Sandbox Code Playgroud)
但是,知道如何将对象转换为json是很棘手的(例如,不是引用带双引号的字符,而是需要引用单引号).
因此,我希望有更好的方法将类型元素添加到列表中.
谢谢你的帮助,埃里克
azure ×1
c# ×1
cassandra ×1
highlighting ×1
ios ×1
linq ×1
lucene ×1
many-to-many ×1
msmq ×1
nest ×1
performance ×1
workflow ×1