ทำให้ Solr เพิกเฉยต่อเครื่องหมายสแลชต่อท้ายใช่ไหม

ฉันมีฟิลด์ที่จัดทำดัชนี url โดยที่เอกสารบางฉบับของฉันมีเครื่องหมายทับต่อท้ายฟิลด์ url แต่บางฉบับไม่มี ฉันต้องการค้นหาฟิลด์นี้ใน Solr โดยไม่สนใจเครื่องหมายทับต่อท้าย เพื่อให้ผลลัพธ์ที่ตรงกันทั้งหมดกลับมาโดยไม่คำนึงว่าจะมีเครื่องหมายทับต่อท้ายหรือไม่ก็ตาม

ตัวอย่างเช่น ถ้าฉันส่งข้อความค้นหา: q=url:https://www.test.com/api/v1/test/ ฉันต้องการส่งคืนเอกสารที่มีฟิลด์ url เป็น https://www.test.com/api/v1/test/ OR https://www.test.com/api/v1/test

ในทำนองเดียวกัน ถ้าฉันส่งข้อความค้นหาโดยไม่มีเครื่องหมายทับต่อท้าย ฉันต้องการผลลัพธ์แบบเดียวกับด้านบน (url โดยมี OR ไม่มีเครื่องหมายทับต่อท้าย)

สิ่งนี้สามารถทำได้อย่างไร? ฉันรู้เกี่ยวกับคุณสมบัติตัวแทนของ Solr แต่ฉันไม่ต้องการละเว้นอักขระลงท้ายใดๆ (เช่น url:https://www.test.com/api/v1/test? ไม่ควรส่งคืนเอกสารด้วย url จาก https://www.test.com/api/v1/test) ฉันต้องการเอฟเฟกต์ไวด์การ์ดนี้สำหรับเครื่องหมายทับต่อท้ายเพียงอันเดียวเท่านั้น

ถ้ามันช่วยได้ ฉันใช้ Solr 4 (ใช่ ฉันรู้ว่ามันเก่า)


person OMGitzMidgar    schedule 31.01.2019    source แหล่งที่มา


คำตอบ (2)


ฉันอาจใช้การแทนที่ Regex ในการจัดทำดัชนีและแทนที่ ^(.*)(?:\/)?$ ด้วย $1...

รับสิ่งเหล่านี้เป็นอินพุต:

url:https://www.test.com/api/v1/test?
url:https://www.test.com/api/v1/test/
url:https://www.test.com/api/v1/test

มันควรจะเก็บ:

url:https://www.test.com/api/v1/test?
url:https://www.test.com/api/v1/test
url:https://www.test.com/api/v1/test

หากคุณดำเนินการแทนที่แบบเดียวกันกับการสืบค้น การสืบค้นของคุณควรตรงกันตามที่คาดไว้: การสืบค้นที่มีหรือไม่มีเครื่องหมายทับต่อท้ายจะจับคู่ URL ที่เก็บไว้โดยมีหรือไม่มีเครื่องหมายทับต่อท้าย

person jwismar    schedule 31.01.2019

คุณสามารถใช้ PathHierarchyTokenizer สำหรับสิ่งนี้ นอกจากนี้ คุณยังสามารถค้นหาบางส่วนของ URL ได้โดยไม่ต้องใช้ไวด์การ์ด

เช่น. q=url:www.test.com จะตรงกับ URL ที่จัดทำดัชนีด้วย

ซึ่งจำเป็นต้องมีประเภทฟิลด์ที่เหมาะสมใน schema.xml ของคุณ

<fieldType name="url" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

จากนั้นเพิ่มหรือแก้ไขคำจำกัดความฟิลด์ของเอกสารของคุณเพื่อใช้ url fieldType นั้นใน schema.xml

<field name="url" type="url" indexed="true" stored="true"/>
person cheffe    schedule 01.02.2019
comment
สิ่งนี้ใกล้เคียงกับสิ่งที่ฉันกำลังมองหา (Tokenizer หรือสิ่งที่คล้ายกัน) แต่ฉันไม่ต้องการให้ q=url:www.test.com ตรงกับ URL ที่จัดทำดัชนีไว้เช่น https://www.test.com/api/v1/test/ มีวิธีแก้ไข Tokenizer นี้ให้ละเว้นเครื่องหมายทับต่อท้ายเท่านั้น ไม่มีอะไรอื่นอีกหรือไม่ - person OMGitzMidgar; 01.02.2019
comment
ไม่ ฉันไม่คิดอย่างนั้น - person cheffe; 02.02.2019