小编Bra*_*don的帖子

创建ElasticSearch查询以搜索所有字段并同时使用部分匹配

另外,我有部分搜索工作,我可以搜索所有字段.但是我无法在映射所有字段的搜索上使用部分匹配.

当我使用部分匹配时,这将返回我的名字:

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)

elasticsearch

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

映射时,在ElasticSearch中支持ngram匹配的完全匹配

我有部分匹配与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

elasticsearch nest

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

给定距离起点的距离时,在Bézier曲线上找到一个点?

我创造了一个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次)

java bezier distance

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

创建动态用户界面?

我主要是一个后端开发人员,但是我正在从事前端设计。我在应用程序中仅构建一个面板(窗体)。我必须根据用户为先前参数选择的内容,动态地从表单中添加/删除其他项。例如,面板顶部将有一个客户下拉列表。我需要能够配置用户选择后将显示哪些其他下拉菜单。我将至少有90种不同的配置。每个配置将有大约50个参数。用C#处理这种情况的最佳方法是什么?

我公司的某人建议对每种配置使用一种新形式,因此我看到人们说要使用用户控件,而其他人则说要动态地将控件放入列表并以这种方式生成内容。其中一些建议似乎违反直觉。

有人可以建议一种“适当”的方法来做到这一点吗?从角度来看,我以前只构建过一种表单,而且非常简单。(这是使用.net 4.0的桌面应用程序)

编辑:这是在Winforms中

c# user-interface

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

如何在ElasticSearch中使用带有ngrams的通配符

是否可以在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会得到以下顺序的结果:

  • C.A1234.560
  • C.A1234.800
  • C.A1234.700 < - 这不应该是第一个吗?
  • C.A1234.950

elasticsearch

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

从shell_execute启动时,Clickonce程序不会启动

我有一个很老的程序,我无法控制.它启动一个文件类型及其默认应用程序(我无法修改此代码):

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)

c# clickonce shellexecute

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

如何反转4x4矩阵的y坐标?

我在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)

c# matrix slimdx

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

如何在NEST中使用多个索引分析器?

我有一个已创建的公司类型。在该公司类型的内部,我有一个名为“摘要”的字段。如何在此字段中添加多个索引分析器?

我简要地研究了使用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)

elasticsearch nest

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