另外,我有部分搜索工作,我可以搜索所有字段.但是我无法在映射所有字段的搜索上使用部分匹配.
当我使用部分匹配时,这将返回我的名字:
GET /_search?pretty=true
{
"query": {
"match": {
"FullName": "andon"
}
}
}
Run Code Online (Sandbox Code Playgroud)
此搜索在所有字段上运行,但不进行部分匹配(0次点击):
GET /_search?pretty=true
{
"query": {
"match": {
"_all": "andon"
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何将部分匹配与所有字段和类型的搜索相结合,我需要做些什么?我有很多字段和类型,所以我希望避免必须手动指定它们.
如果它有任何区别,我将从连接到SQL的River插入我的数据.
编辑: 我现在在我的映射中有_all字段.它似乎没有任何区别.
PUT /contact/
{
"settings" : {
"index" : {
"analysis" : {
"analyzer" : {
"my_ngram_analyzer" : {
"tokenizer" : "my_ngram_tokenizer"
}
},
"tokenizer" : {
"my_ngram_tokenizer" : {
"type" : "nGram",
"min_gram" : "1",
"max_gram" : "10"
}
}
}
}
},
"mappings": {
"_default_": {
"_all" : …Run Code Online (Sandbox Code Playgroud) 我有部分匹配与ngrams一起使用的单词.如何修改映射以始终支持ngram标记的完全匹配?我不想修改查询.一个搜索框将搜索多个类型,每个类型都有自己的字段.
例如,假设我正在搜索职称,一个人的头衔是"现场工程师",另一个人是"发动机技师".如果用户搜索"引擎",我希望ES将后者视为更相关.
我几乎逐字地使用这个映射:https: //stackoverflow.com/a/19874785/978622-Exception:我使用的是最小值为3且最大值为11的ngram而不是edge ngram
是否可以将增强/功能评分应用于分析仪?如果是这样,我将同时将"full_name"和"partial_name"分析器应用于我的索引并提升第一个.
编辑:我正在使用ElasticSearch 1.1.1和Nest 1.0.0 beta
我创造了一个4点Bézier曲线和一个距离.从起点开始,如何找到距离起点距离的点的x,y坐标?
我已经看了其他的例子,从我所知道的,他们通过将曲线分成几千个点来近似值,然后找到最近的点.这对我不起作用.对于我正在做的事情,我希望精确到只有两位小数.下面是我创建Bézier曲线的简单形式.(y值是任意的,x值总是相隔352个像素).如果重要,我正在使用Java.
path.moveTo(0, 400);
path.curveTo(352, 480, 704, 590, 1056, 550);
Run Code Online (Sandbox Code Playgroud)
因此,假设我的起点是0,400,我如何找到距离起点(沿着曲线)距离为35的点的坐标?(理想情况下,这不是处理器密集型的.这可能最终必须每秒运行200次)
我主要是一个后端开发人员,但是我正在从事前端设计。我在应用程序中仅构建一个面板(窗体)。我必须根据用户为先前参数选择的内容,动态地从表单中添加/删除其他项。例如,面板顶部将有一个客户下拉列表。我需要能够配置用户选择后将显示哪些其他下拉菜单。我将至少有90种不同的配置。每个配置将有大约50个参数。用C#处理这种情况的最佳方法是什么?
我公司的某人建议对每种配置使用一种新形式,因此我看到人们说要使用用户控件,而其他人则说要动态地将控件放入列表并以这种方式生成内容。其中一些建议似乎违反直觉。
有人可以建议一种“适当”的方法来做到这一点吗?从角度来看,我以前只构建过一种表单,而且非常简单。(这是使用.net 4.0的桌面应用程序)
编辑:这是在Winforms中
是否可以在ElasticSearch中结合使用通配符匹配和ngrams?我已经在使用长度为3-11的ngrams.
作为一个非常小的例子,我有记录C1239123和C1230123.用户想要返回这两个.这是他们所知道的唯一信息:C123?12
上面的情况不适用于我的完整匹配分析器,因为查询缺少3的结尾.我的印象是通配符匹配可以开箱即用,但如果我执行类似于上面的搜索,我会得到胡言乱语.
查询:
.Search<ElasticSearchProject>(a => a
.Size(100)
.Query(q => q
.SimpleQueryString(query => query
.OnFieldsWithBoost(b => b
.Add(f => f.Summary, 2.1)
.Add(f => f.Summary.Suffix("ngram"), 2.0)
.Query(searchQuery))));
Run Code Online (Sandbox Code Playgroud)
分析:
var projectPartialMatch = new CustomAnalyzer
{
Filter = new List<string> { "lowercase", "asciifolding" },
Tokenizer = "ngramtokenizer"
};
Run Code Online (Sandbox Code Playgroud)
标记生成器:
.Tokenizers(t=>t
.Add("ngramtokenizer", new NGramTokenizer
{
TokenChars = new[] {"letter","digit","punctuation"},
MaxGram = 11,
MinGram = 3
}))
Run Code Online (Sandbox Code Playgroud)
编辑:主要目的是允许用户准确地告诉搜索引擎未知字符的位置.这样可以保留匹配顺序.我没有查询查询,只有索引字段.
编辑2有更多的测试结果:我已经简化了我之前的例子.乱码是由标点符号过滤器引起的.有一个恰当的例子,没有乱码,但结果不会以相关的顺序返回.如下所示,我不确定为什么前2个结果完全匹配.Ngram不适用于查询.
搜索c.a123?.7?0会得到以下顺序的结果:
我有一个很老的程序,我无法控制.它启动一个文件类型及其默认应用程序(我无法修改此代码):
LET Err (SHELL_EXECUTE 'open' (FIX_MESG '"{1}"' File_name) '' '')
Run Code Online (Sandbox Code Playgroud)
^^上述代码有效,只要该文件类型与ClickOnce程序无关.
旧程序是32位,操作系统是Windows 7 64位.我可以将我的clickonce程序编译为任何东西,但似乎都没有.(我试过x86,x64和anyCPU)
如何使32位程序使用shell执行在64位操作系统上启动ClickOnce程序?
更多细节:这是一个可重现的错误.建立2个程序.程序1是Clickonce程序.将其与任何文件类型相关联.程序2将执行shell执行命令以打开与clickonce程序关联的任何文件类型.如果将程序2编译为x86,它将为您提供成功响应,但不执行任何操作.
控制台shell执行程序的测试代码:
private static void Main()
{
int value = ShellExecuteA(IntPtr.Zero, "open", @"C:\Users\bsee\Desktop\testfile.ecn2", "", "", 0);
if (value > 32)
MessageBox.Show("Clickonce reports success. But did it actually start?");
}
[DllImport("Shell32.dll")]
public static extern int ShellExecuteA(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirecotry, int nShowCmd);
Run Code Online (Sandbox Code Playgroud) 我在SlimDX工作,我从一个x,y,z坐标开始.我正在转换右手坐标系中的一个点,其中Z在垂直正位置到右手y垂直正(DirectX).为了使旋转变得容易,我将我的观点转换为4x4矩阵.现在我需要反转y坐标.如何以矩阵形式反转y坐标?
Matrix finalMatrix = originalMatrix *
Matrix.RotationX(MathHelper.ToRadians(85f)) *
Matrix.RotationY(MathHelper.ToRadians(-.075f)) *
Matrix.RotationZ(MathHelper.ToRadians(55f)) ;
Run Code Online (Sandbox Code Playgroud) 我有一个已创建的公司类型。在该公司类型的内部,我有一个名为“摘要”的字段。如何在此字段中添加多个索引分析器?
我简要地研究了使用Yakaz插件,但似乎无法与NEST一起使用。
其背后的原因是,有时用户会在查询中搜索带有句点的公司名称,而其他时候则不包括句点。我想在公司名称上使用ngram进行部分匹配,带标点和不带标点。我目前正在使用停用词过滤器来删除标点符号。
摘要字段的属性(具有多个索引分析器将引发错误):
[ElasticProperty(IndexAnalyzer = "partial_match", IndexAnalyzer = "partial_match_no_punctuation", SearchAnalyzer = "full_match")]
public string Summary { get; set; }
Run Code Online (Sandbox Code Playgroud)
对应:
private static void CreateMapping(ElasticClient client)
{
var partialMatchNoPunctuation = new CustomAnalyzer
{
Filter = new List<string> { "standard", "lowercase", "asciifolding", "punctuation_filter", "name_ngrams" }, //Apply all filters before ngram
Tokenizer = "standard"
};
var partialMatch = new CustomAnalyzer
{
Filter = new List<string> { "standard", "lowercase", "asciifolding", "name_ngrams" }, //Apply all filters before ngram
Tokenizer = "standard"
};
var fullMatch …Run Code Online (Sandbox Code Playgroud)