2016-01-29 6 views
1

У меня есть база данных графа (Neo4j), в которой я настроил свойство, которое будет автоматически индексироваться с полным текстом. Все работает отлично, за исключением того, что у меня есть 1 строка, которая не возвращается, когда я выполняю конкретный запрос cypher.Странные результаты с запросом cypher в Neo4j и node_auto_index

Моей собственность в графе равных (я положил в смелом слово я использую в моем шифровальщика запроса):

1pizzeriadeicomparipourlesamateursdevraiespizzasitaliennescestadireavecpastropdepateetcuitesaufeudeboislaplacenepayepasdeminesalleettablesassezpetitesetilfautsarmerdepatiencelessamedisoirssionnapasreserveenv15minutesdattentemaislespizzassontexcellentes ресторан montrealmontrealquebeccanada5148435

I f Я выполняю следующий запрос cypher:

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 ааа montrealmontrealquebeccanada5148435411

затем, если я исполню же Cypher запрос, строка теперь возвращается.

Любой сталкивался с подобными проблемами! Это сводит меня с ума!

Я тестировал как Neo4j-предприятие 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'. В этом случае вы не можете использовать автоматические индексы, но вы можете использовать ручные индексы - по одному индексу на язык. –