我正在使用 ElasticSearch 1.5.2。我想允许在我的搜索引擎中搜索短语。
假设文本是
read with section 114 of the Indian Penal Code
使用默认分析器,我无法在搜索查询中获得任何结果
section 114 penal code
所以,我添加了一个分析器:
XContentBuilder settingsBuilder = XContentFactory.jsonBuilder()
.startObject()
.startObject("analysis")
.startObject("filter")
.startObject("filter_shingle")
.field("type","shingle")
.field("max_shingle_size",2)
.field("min_shingle_size",2)
.field("output_unigrams",false)
.endObject()
.startObject("filter_stemmer")
.field("type","porter_stem")
.field("language","English")
.endObject()
.endObject()
.startObject("tokenizer")
.startObject("my_ngram_tokenizer")
.field("type","nGram")
.field("min_gram",1)
.field("max_gram",1)
.endObject()
.endObject()
.startObject("analyzer")
.startObject("ShingleAnalyzer")
.field("tokenizer","my_ngram_tokenizer")
.array("filter","snowball","standard","lowercase","filter_stemmer","filter_shingle")
.endObject()
.endObject()
.endObject()
.endObject();
client.admin().indices()
.prepareCreate("temp_index").setSettings(settingsBuilder).get();
Run Code Online (Sandbox Code Playgroud)
我正在索引文件(已经是可接受的 json 格式),如下所示:
String file1 = readFile("1.txt");
IndexResponse response1 = client.prepareIndex("new_index","docs").setSource(file1).execute().actionGet();
Run Code Online (Sandbox Code Playgroud)
并使用matchQuery这样的方式进行查询:
MatchQueryBuilder mqb1 = QueryBuilders.matchPhraseQuery("text", str).analyzer("ShingleAnalyzer");
SearchResponse matchResponse1 = client.prepareSearch().setQuery(mqb1).execute().actionGet();
Run Code Online (Sandbox Code Playgroud)
但我仍然没有得到任何结果。你能建议我该怎么做吗?
编辑:实际上,当我尝试从这个分析器中获取任何类型的结果时,我没有得到任何结果......即使有一个查询“部分”,它存在于我索引的所有文档中,我没有得到结果,而,当我使用默认分析器进行搜索时,我得到了一些结果。那么,这个分析仪是不工作还是什么?
编辑:示例文档, …
我有一个桌子员工,
CREATE TABLE employees (
employeeid NUMERIC(9) NOT NULL,
firstname VARCHAR(10),
lastname VARCHAR(20),
deptcode CHAR(5),
salary NUMERIC(9, 2),
PRIMARY KEY(employeeid)
);
Run Code Online (Sandbox Code Playgroud)
我想计算工资的标准差.
这是我正在使用的代码:
select avg(salary) as mean, sqrt(sum((salary-avg(salary))*(salary-avg(salary)))/count(employeeid)) as SD
from employees
group by employeeid;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ORA-00979: not a GROUP BY expression
00979. 00000 - "not a GROUP BY expression"
*Cause:
*Action:
Error at Line: 260 Column: 12
Run Code Online (Sandbox Code Playgroud)
第260行第12列是平均(工资)
我该如何解决这个问题?
我想创建一个以下形式的矩阵
Y = [1 x x.^2 x.^3 x.^4 x.^5 ... x.^100]
Run Code Online (Sandbox Code Playgroud)
设x是列向量.甚至更多的变种,如
Y = [1 x1 x2 x3 (x1).^2 (x2).^2 (x3).^2 (x1.x2) (x2.x3) (x3.x1)]
Run Code Online (Sandbox Code Playgroud)
设x1,x2和x3为列向量让我们考虑第一个.我试过用类似的东西
Y = [1 : x : x.^100]
Run Code Online (Sandbox Code Playgroud)
但这也没有用,因为它意味着取Y = [1 x 2.*x 3.*x ... x.^ 100]?(即,所有值在1到x.^ 100之间,差异为x)因此,这也不能用于生成这样的矩阵.请考虑x = [1; 2; 3; 4]; 并提出一种生成此矩阵的方法
Y = [1 1 1 1 1;
1 2 4 8 16;
1 3 9 27 81;
1 4 16 64 256];
Run Code Online (Sandbox Code Playgroud)
无需手动编写
Y = [ones(size(x,1)) x x.^2 x.^3 x.^4]
Run Code Online (Sandbox Code Playgroud) length()返回字符串中的字符数并size()返回一个size_t也是相同但用于使其与其他STL容器一致的字符数.
对于计算length(),字符串遍历所有字符并计算长度.所以,O(n)时间.
是否size()也一样呢?
或者可以及时直接计算变量的大小O(1)?
所以,我的问题是,它们在速度方面是否相同(如计算它们的方式)还是在O(1)时间上计算尺寸?