2016-01-29 55 views
1

我有一个图形数据库(Neo4j),其中我将一个属性配置为使用全文自动索引。除了当我执行特定的密码查询时没有返回1行时,一切都很好。在Neo4j和node_auto_index中使用密码查询的奇怪结果

我在图中的equals(我已经把大胆我使用的话在我的暗号查询)特性:

1pizzeriadeicomparipourlesamateursdevraiespizzasitaliennescestadireavecpastropdepateetcuitesaufeudeboislaplacenepayepasdeminesalleettablesassezpetitesetilfautsarmerdepatiencelessamedisoirssionnapasreserveenv15minutesdattentemaislespizzassontexcellentes 餐厅 montrealmontrealquebeccanada5148435

我f执行以下密码查询:

START n1=NODE:node_auto_index('Search_Field:*res* AND Search_Field:*taurant* AND Search_Field:*411*') 
RETURN n1.Search_Field 

我的行已返回! 到目前为止没有问题!

但是当我通过字当头«餐厅»一起如下执行:

START n1=NODE:node_auto_index('Search_Field:*restaurant* AND Search_Field:*411*')  
RETURN n1.Search_Field 

然后没有行返回。

我测试了很多东西,以了解并尝试找到一种模式或可以解释问题的东西。看来我的财产价值的长度可能会起作用。我知道这听起来很奇怪,但如果我添加3个或更多字母,比如说«aaa»,在属性值中的单词餐厅之后,就像这样(看粗体字母接近值的末尾):

1pizzeriadeicomparipourlesamateursdevraiespizzasitaliennescestadireavecpastropdepateetcuitesaufeudeboislaplacenepayepasdeminesalleettablesassezpetitesetilfautsarmerdepatiencelessamedisoirssionnapasreserveenv15minutesdattentemaislespizzassontexcellentesrestaurant AAA montrealmontrealquebeccanada5148435411

然后,如果我执行相同的暗号查询,现在返回的行。

任何人都遇到类似的问题!这让我疯狂!

我已经在Neo4j-enterprise 2.2.1和最新的社区3.0.0-M02上进行了测试。与他们两人的结果相同。

任何想法,我应该寻找什么?

回答

0

查询条件通过lucene分析器传递 - 就像您索引的内容一样。我不是100%确定的,但我认为默认分析仪“吃掉”了数字,这就是为什么你没有得到结果。

您可以在首次创建索引时提供分析器类。您也可以使用Java API来查询索引 - 这允许在Lucene Query的实例中传递,请参阅我的示例http://blog.armbruster-it.de/2014/10/deep-dive-on-fulltext-indexing-with-neo4j/

+0

我会看看不同的分析仪,但因为我不确定它是关于数字的,因为我在图中有大约5000个条目,所有都有数字,当我查询它们时,除了我描述的特定行以上,如果我通过再加3个字母来改变这个值,那么这个行就会被找到! –

+0

另外,如果人们正在双语输入文本(即:法语和英语),您知道任何采用多种语言的自定义分析器吗? –

+0

几个人在他们的财产密钥上使用了一种命名惯例,例如, 'name_en','name_fr'。在这种情况下,您不能使用自动索引,但可以使用手动索引 - 每种语言一个索引。 –