小编Øyv*_*ind的帖子

Catmull-rom曲线没有尖点,没有自交叉

我有以下代码来计算四个控制点之间的点,以生成catmull-rom曲线:

CGPoint interpolatedPosition(CGPoint p0, CGPoint p1, CGPoint p2, CGPoint p3, float t)
{
    float t3 = t * t * t;
    float t2 = t * t;

    float f1 = -0.5 * t3 + t2 - 0.5 * t;
    float f2 = 1.5 * t3 - 2.5 * t2 + 1.0;
    float f3 = -1.5 * t3 + 2.0 * t2 + 0.5 * t;
    float f4 = 0.5 * t3 - 0.5 * t2;

    float x = p0.x * …
Run Code Online (Sandbox Code Playgroud)

curve catmull-rom-curve

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

Gulp.js,保存文件时监视任务运行两次

鉴于我的gulpfile.js中的以下代码,每次保存或更改文件时,任务运行两次而不是一次,为什么?我只想让它运行一次.

var gulp = require('gulp');

gulp.task('default', function() {

  gulp.watch('server/**/*.js', function(){
    console.log('This runs twice everytime I change/save a javascript file located at server/**/*.js');
  }); 

});
Run Code Online (Sandbox Code Playgroud)

我也经历了与grunt和插件grunt-contrib-watch相同的经历.

javascript gulp

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

Cypher查询正则表达式

我正在尝试匹配Neo4j数据库中的节点.节点有一个名为"name"的属性,我在Cypher中使用正则表达式来匹配它.我只想匹配整个单词,所以如果我提供字符串"java","javascript"应该不匹配.如果要匹配的字符串是几个单词,即"java script",我将执行两个单独的查询,一个用于"java",一个用于"script".

这是我到目前为止:

match (n) where n.name =~ '(?i).*\\bMYSTRING\\b.*' return n
Run Code Online (Sandbox Code Playgroud)

这有效,但它不适用于某些特殊字符,如"+"或"#".所以我无法搜索"C++"或"C#"等.上面代码中的正则表达式只是使用\ b作为字边界.它也逃避它,所以它正常工作.

我尝试了这篇文章的一些版本:正则表达式匹配从特殊字符开始的单词边界,但它没有真正起作用,也许我做错了.

如何使用Cypher和Neo4j中的特殊字符进行此操作?

regex neo4j cypher

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

在嵌套属性中使用 function_score 进行弹性搜索提升

在 Elasticsearch 中,给定以下文档结构:

"workhistory": {
  "positions": [{
    "company": "Some company",
    "position": "Some Job Title",
    "start": 1356998400,
    "end": 34546576576,
    "description": "",
    "source": [
       "some source", 
       "some other source"
    ]
  },
  {
    "company": "Some other company",
    "position": "Job Title",
    "start": 1356998400,
    "end": "",
    "description": "",
    "source": [
       "some other source"
    ]
  }]
}
Run Code Online (Sandbox Code Playgroud)

和此结构的映射:

  workhistory: {
    properties: {    
      positions: {
        type: "nested", 
        include_in_parent: true, 
        properties: {                 
          company: {
            type: "multi_field",
            fields: {
              company: {type: "string"},
              original: {type : "string", analyzer : "string_lowercase"} …
Run Code Online (Sandbox Code Playgroud)

elasticsearch

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

Neo4j cypher查询中的性能

我有以下密码查询:

MATCH (country:Country { name: 'norway' }) <- [:LIVES_IN] - (person:Person)
WITH person
MATCH (skill:Skill { name: 'java' }) <- [:HAS_SKILL] - (person)
WITH person 
OPTIONAL MATCH (skill:Skill { name: 'javascript' }) <- [rel:HAS_SKILL] - (person)
WITH person, CASE WHEN skill IS NOT NULL THEN 1 ELSE 0 END as matches 
ORDER BY matches DESC 
LIMIT 50 
RETURN COLLECT(ID(person)) as personIDs
Run Code Online (Sandbox Code Playgroud)

添加更多节点时似乎表现更差.现在只有5000个Person节点(Person节点可以与Skill节点有多个HAS_SKILL关系).现在,执行查询大约需要180毫秒,但添加另外1000个具有关系的Person节点会为查询添加30-40毫秒.我们计划拥有数百万个Person节点,因此每1000人添加40毫秒是不行的.

我在查询中使用参数而不是上面查询中的'norway','java','javascript'.我已经创建了索引:国家(名称)和:技能(名称).

我的查询目标是匹配生活在指定国家(挪威)的每个人,这些人也具有'java'技能.如果此人也具有技能'javascript',则应在结果中命令更高.

如何重构查询以提高性能?

编辑:

如果我转出,那么:Country节点似乎也存在问题

MATCH (country:Country { name: 'norway' }) <- [:LIVES_IN] - (person:Person)
Run Code Online (Sandbox Code Playgroud)

MATCH (city:City …
Run Code Online (Sandbox Code Playgroud)

neo4j cypher

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