Membuat Solr mengabaikan garis miring?

Saya memiliki bidang yang diindeks url di mana beberapa dokumen saya memiliki garis miring di akhir bidang url, yang lain tidak. Saya ingin menanyakan bidang ini di Solr sambil mengabaikan garis miring, sehingga semua hasil yang cocok muncul kembali terlepas dari apakah mereka memiliki garis miring di akhir atau tidak.

Misalnya, jika saya mengirim pertanyaan: q=url:https://www.test.com/api/v1/test/ Saya ingin mendapatkan kembali dokumen apa pun yang memiliki url bidang https://www.test.com/api/v1/test/ ATAU https://www.test.com/api/v1/test.

Demikian pula, jika saya mengirim kueri tanpa garis miring, saya ingin hasil yang sama seperti di atas (url dengan OR tanpa garis miring).

Bagaimana hal ini dapat dilakukan? Saya tahu tentang fitur wildcard Solr, tapi saya tidak ingin mengabaikan karakter akhir apa pun (misalnya url:https://www.test.com/api/v1/test? tidak boleh mengembalikan dokumen dengan url dari https://www.test.com/api/v1/test). Saya hanya ingin efek wildcard ini untuk satu garis miring.

Jika ini membantu, saya menggunakan Solr 4 (ya, saya tahu itu sudah lama).


person OMGitzMidgar    schedule 31.01.2019    source sumber


Jawaban (2)


Saya mungkin akan menggunakan pengganti Regex saat mengindeks, dan mengganti ^(.*)(?:\/)?$ dengan $1...

Mengingat ini sebagai masukan:

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

itu harus menyimpan:

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

Jika Anda kemudian melakukan penggantian yang sama pada kueri, kueri Anda akan cocok seperti yang diharapkan: kueri dengan atau tanpa garis miring akan cocok dengan URL yang disimpan dengan atau tanpa garis miring.

person jwismar    schedule 31.01.2019

Anda dapat menggunakan PathHierarchyTokenizer untuk ini. Sebagai nilai tambah, Anda juga dapat mencari bagian URL tanpa memerlukan wildcard.

misalnya q=url:www.test.com juga akan cocok dengan URL yang diindeks.

Ini memerlukan fieldType yang sesuai di schema.xml Anda

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

Kemudian tambahkan atau ubah definisi bidang dokumen Anda untuk menggunakan url fieldType tersebut, juga di schema.xml

<field name="url" type="url" indexed="true" stored="true"/>
person cheffe    schedule 01.02.2019
comment
Ini lebih dekat dengan apa yang saya cari (Tokenizer atau yang serupa), tetapi saya tidak ingin q=url:www.test.com cocok dengan URL yang diindeks seperti https://www.test.com/api/v1/test/. Apakah ada cara untuk memodifikasi Tokenizer ini agar hanya mengabaikan garis miring, tidak ada yang lain? - person OMGitzMidgar; 01.02.2019
comment
Tidak, menurutku tidak. - person cheffe; 02.02.2019