سؤال

أقوم بتشغيل Titan 0.4.0 وأحاول استخدام الأحدث REGEX عامل للبحث عن سلسلة ES.

لقد قمت بإنشاء فهرس على my_key لفهرس ES الخاص بي المسمى search.

gremlin> g.makeKey("my_key").dataType(String.class).indexed("search",Vertex.class).single().make()
==>v[82]

ثم أقوم بإضافة قمة:

gremlin> v = g.addVertex(null, ["my_key":"123-abc"])
==>v[8]
gremlin> v.map
==>{my_key=123-abc}

ال REGEX يبدو أنه يعمل...

gremlin> g.query().has("my_key", REGEX, "[12]{2}3").vertices()
==>v[8]

...ولكن فقط على رمزي "123" و "abc" بشكل مستقل:

gremlin> g.query().has("my_key", REGEX, "123").vertices()
==>v[8]
gremlin> g.query().has("my_key", REGEX, "abc").vertices()
==>v[8]

ومع ذلك، إذا حاولت تشغيل تعبير عادي يطابق القيمة الكاملة الخاصة بي، فلن يتم استرداد قمتي (لا يتم إرجاع أي من النتائج أدناه):

gremlin> g.query().has("my_key", REGEX, "123-abc").vertices()
gremlin> g.query().has("my_key", REGEX, "123.abc").vertices()
gremlin> g.query().has("my_key", REGEX, "[0-9]+.[abc]{3}").vertices()
gremlin> g.query().has("my_key", REGEX, "123.").vertices()

هل هناك طريقة في Titan للاستعلام عن الفهرس بهذه الطريقة (regex بدون مصطلحات رمزية/محللة)؟

هل كانت مفيدة؟

المحلول

الطريقة التي تم بها التعامل مع هذا في Titan حتى 0.4.0 يمكن أن تكون مربكة بعض الشيء، لأن السلاسل يتم ترميزها دائمًا عندما تتم فهرستها في واجهة خلفية للفهرسة الخارجية.يؤدي هذا إلى "تقطيع" السلاسل إلى كلمات وتجاهل الأحرف غير الأبجدية (بالإضافة إلى كلمات التوقف).

في إصدار Titan 0.4.1 القادم، سنجعل هذا الأمر أكثر وضوحًا.ألق نظرة على الوثائق المحدثة:https://github.com/thinkaurelius/titan/wiki/Full-Text-and-String-Search

جوهر:يمكنك الآن تحديد ما إذا كنت تريد فهرسة سلاسلك "كما هي" أو كحقيبة كلمات بعد التحليل.بالنسبة لحالة الاستخدام الخاصة بك، سيكون الأول.وقمنا أيضًا بتصويب المصطلحات:إذا كنت تبحث عن كلمات في سلسلة تتطابق مع تعبير عادي، فسيتم استخدام المسند Text.CONTAINS_REGEX.إذا كنت تريد أن تتطابق السلسلة بأكملها مع تعبير، فاستخدم Text.REGEX.

Titan 0.4.1 حاليًا في المعاينة النهائية وسيتم إصداره الأسبوع المقبل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top